Saya akan menjelaskan ini dengan menggunakan sintaks "ANSI JOIN" yang setara:
Opsi 1
SELECT *
FROM TXN
LEFT JOIN CHK
ON TXN.CHK_ID = CHK.CHK_ID
WHERE TXN.CURRENT = 'Y'
AND CHK.CURRENT = 'Y'
Opsi 2
SELECT *
FROM TXN
LEFT JOIN CHK
ON TXN.CHK_ID = CHK.CHK_ID
AND CHK.CURRENT = 'Y'
WHERE TXN.CURRENT = 'Y'
Seperti yang Anda lihat, pada opsi 1, predikat konstan Anda diterapkan setelah LEFT JOIN ekspresi tabel ditentukan, yaitu pada hasil LEFT JOIN .
Pada opsi 2, salah satu predikat konstan Anda adalah bagian dari LEFT JOIN ekspresi.
Bagaimana cara LEFT JOIN bekerja?
Gagasan LEFT JOIN adalah ia akan mengembalikan semua baris dari LEFT sisi JOIN ekspresi, terlepas dari apakah ada baris yang cocok di sisi lain, diberikan predikat join. Jadi, di opsi 2, terlepas dari apakah Anda menemukan baris di CHK dengan CURRENT = 'Y' untuk satu baris di TXN , baris di TXN masih dikembalikan. Inilah mengapa Anda mendapatkan lebih banyak baris di opsi 2.
Juga, contoh ini harus menjelaskan mengapa Anda harus memilih sintaks "ANSI JOIN". Dari perspektif pemeliharaan / keterbacaan, jauh lebih jelas apa yang dilakukan kueri Anda.