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.