tautan @Gratzy disediakan sangat membantu
Perbedaan antara kondisi dalam klausa ON dan klausa WHERE tentu saja abu-abu.
Untuk INNER JOINS mereka setara. Untuk OUTER JOINS, pemahaman Anda benar bahwa klausa WHERE diterapkan secara konseptual setelah kondisi ON dievaluasi.
Tetapi dalam banyak kasus perbedaannya lebih pada niat daripada fungsionalitas. Sering ada perbedaan semantik antara kondisi ON dan klausa WHERE.
Misalnya, versi SQL Server yang lebih lama benar-benar menerapkan sintaks ON menggunakan kondisi dalam klausa WHERE, menggunakan *=
atau =*
sintaks untuk menyiratkan gabungan LEFT atau RIGHT (yang menyebabkan hasil yang agak berbeda dari LEFT dan RIGHT JOIN yang setara dalam beberapa kasus)
Secara umum, saran saya adalah selalu menggunakan bidang kunci yang sesuai dalam klausa AKTIF untuk menggabungkan catatan berdasarkan logika bagaimana catatan berhubungan satu sama lain. Gunakan klausa WHERE untuk menerapkan ketentuan pemfilteran yang secara progresif membatasi kumpulan hasil ini.