Voy a explicar esto usando la sintaxis equivalente "ANSI JOIN":
Opción 1
SELECT *
FROM TXN
LEFT JOIN CHK
ON TXN.CHK_ID = CHK.CHK_ID
WHERE TXN.CURRENT = 'Y'
AND CHK.CURRENT = 'Y'
Opción 2
SELECT *
FROM TXN
LEFT JOIN CHK
ON TXN.CHK_ID = CHK.CHK_ID
AND CHK.CURRENT = 'Y'
WHERE TXN.CURRENT = 'Y'
Como puede ver, en la opción 1, sus predicados constantes se aplican después el LEFT JOIN
se especifica la expresión de tabla, es decir, en el resultado de LEFT JOIN
.
En la opción 2, uno de sus predicados constantes es parte de LEFT JOIN
expresión.
¿Cómo LEFT JOIN
trabajo?
La idea de un LEFT JOIN
es que devolverá todas las filas desde la IZQUIERDA lado del JOIN
expresión, independientemente de si hay una fila coincidente en el otro lado, dado el predicado de unión. Entonces, en la opción 2, independientemente de si encuentra una fila en CHK
con CURRENT = 'Y'
para una fila en TXN
, la fila en TXN
todavía se devuelve. Es por eso que obtienes más filas en la opción 2.
Además, este ejemplo debería explicar por qué debería preferir la sintaxis "ANSI JOIN". Desde una perspectiva de mantenimiento/legibilidad, es mucho más claro lo que está haciendo su consulta.