comportamiento del server mysql impnetworkingecible en la izquierda join

CREATE TEMPORARY TABLE tmp_userid ( uUserId int unsigned NOT NULL PRIMARY KEY ) ENGINE='MEMORY'; CREATE TEMPORARY TABLE tmp_studentid ( uClassId INT UNSIGNED NOT NULL, uUserId int unsigned NOT NULL, PRIMARY KEY(uClassId,uUserId) ) ENGINE='MEMORY'; INSERT INTO tmp_userid values (18); INSERT INTO tmp_studentid values (1,1), (1,3), (2,15), (3,20), (3,25), (4,35), (4,45) ; 

Ahora, si bash ejecutar:

 SELECT * FROM tmp_userid U LEFT JOIN tmp_studentid S ON U.uUserId = S.uUserId where uClassId = 4; SELECT * FROM tmp_userid U LEFT JOIN tmp_studentid S ON U.uUserId = S.uUserId AND uClassId = 4; 

devuelve el resultado diferente!

¿Cualquiera puede explicar este comportamiento?

Gracias

si comtesting los planes de ejecución con EXPLAIN verá que la primera consulta tiene Impossible WHERE noticed after reading const tables . En este caso, mysql se une primero y luego filtra el resultado. Dado que ninguna fila de salida de unión coincide con tu filter obtienes resultado final vacío.

La segunda consulta realiza una OUTER JOIN con una condición que siempre es falsa, devolviendo NULL para uClassId y uUserId , pero como no hay filtrado post-join obtendrá resultados.