Untuk inner joins, saya belum benar-benar memperhatikan perbedaan (tetapi seperti semua penyetelan kinerja, Anda perlu memeriksa database Anda di bawah kondisi Anda).
Namun di mana Anda meletakkan kondisi itu membuat perbedaan besar jika Anda menggunakan gabungan kiri atau kanan. Sebagai contoh, pertimbangkan dua pertanyaan ini:
SELECT *
FROM dbo.Customers AS CUS
LEFT JOIN dbo.Orders AS ORD
ON CUS.CustomerID = ORD.CustomerID
WHERE ORD.OrderDate >'20090515'
SELECT *
FROM dbo.Customers AS CUS
LEFT JOIN dbo.Orders AS ORD
ON CUS.CustomerID = ORD.CustomerID
AND ORD.OrderDate >'20090515'
Yang pertama hanya akan memberi Anda catatan-catatan yang memiliki pesanan tertanggal lebih dari 15 Mei 2009 sehingga mengubah bergabung kiri untuk bergabung dalam.
Yang kedua akan memberikan catatan-catatan itu ditambah pelanggan mana pun tanpa pesanan. Hasil yang ditetapkan sangat berbeda tergantung di mana Anda meletakkan kondisinya. (Pilih * hanya untuk tujuan saja, tentu saja Anda tidak boleh menggunakan ini dalam kode produksi.)
Pengecualian untuk ini adalah ketika Anda hanya ingin melihat catatan dalam satu tabel tetapi tidak yang lain. Kemudian Anda menggunakan klausa where untuk kondisi bukan join.
SELECT *
FROM dbo.Customers AS CUS
LEFT JOIN dbo.Orders AS ORD
ON CUS.CustomerID = ORD.CustomerID
WHERE ORD.OrderID is null