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.