Wyjaśnię to za pomocą równoważnej składni „ANSI JOIN”:
Opcja 1
SELECT *
FROM TXN
LEFT JOIN CHK
ON TXN.CHK_ID = CHK.CHK_ID
WHERE TXN.CURRENT = 'Y'
AND CHK.CURRENT = 'Y'
Opcja 2
SELECT *
FROM TXN
LEFT JOIN CHK
ON TXN.CHK_ID = CHK.CHK_ID
AND CHK.CURRENT = 'Y'
WHERE TXN.CURRENT = 'Y'
Jak widać, w opcji 1 predykaty stałe są stosowane po LEFT JOIN określone jest wyrażenie tabeli, tj. w wyniku LEFT JOIN .
W opcji 2 jeden z predykatów stałych jest częścią LEFT JOIN wyrażenie.
Jak LEFT JOIN pracować?
Pomysł LEFT JOIN jest to, że zwróci wszystkie wiersze z LEWO strona JOIN wyrażenie, niezależnie od tego, czy po drugiej stronie znajduje się pasujący wiersz, biorąc pod uwagę predykat złączenia. Tak więc w opcji 2, niezależnie od tego, czy znajdziesz wiersz w CHK z CURRENT = 'Y' dla wiersza w TXN , wiersz w TXN jest nadal zwracany. Dlatego masz więcej wierszy w opcji 2.
Ten przykład powinien również wyjaśnić, dlaczego powinieneś preferować składnię „ANSI JOIN”. Z perspektywy konserwacji / czytelności jest znacznie bardziej jasne, co robi Twoje zapytanie.