Hola:
Hoy me he encontrado una consulta como esta:
SELECT * FROM Tabla1 INNER JOIN Tabla2 ON (Tabla1.C1=Tabla2.C3 AND
Tabla2.C1 IS NOT NULL)
Rapidamente (no sé si por costumbre o porqué) la he traducido a esta
otra:
SELECT * FROM Tabla1 INNER JOIN Tabla2 ON Tabla1.C1=Tabla2.C3
WHERE Tabla2.C1 IS NOT NULL
La sorpresa ha sido que las dos consultas no arrojan el mismo conjunto
de resultados.
La primera es como si "pasase" de Tabla2.C1 IS NOT NULL en el INNER
porque recupera tanto las filas en las que C1 es Nulo como las que
no...
Sin embargo, la segunda funciona bien, la de toda la vida.
¿Es ese el comportamiento de SQL Server? es decir, ignorar el resto de
una condición en una INNER JOIN y quedarse sólo con la primera
condición...
Lo he estado viendo con el plan de ejecución y efectivamente, "pasa"
de la segunda condición en la primera consulta (a mi no me importa,
pero es por si me encuentro algo similar en el futuro, traducirlo al
WHERE)
Gracias y un saludo.
Leer las respuestas