Untuk gabungan dalam seperti ini mereka secara logis setara. Namun, Anda dapat mengalami situasi di mana kondisi di klausa join berarti sesuatu yang berbeda dari kondisi di klausa where.
Sebagai ilustrasi sederhana, bayangkan Anda melakukan join kiri seperti ini;
select x.id
from x
left join y
on x.id = y.id
;
Di sini kita mengambil semua baris dari x, terlepas dari apakah ada id yang cocok di y. Sekarang katakanlah kondisi join kita bertambah - kita tidak hanya mencari kecocokan di y berdasarkan id tetapi juga pada id_type.
select x.id
from x
left join y
on x.id = y.id
and y.id_type = 'some type'
;
Sekali lagi ini memberikan semua baris di x terlepas dari apakah ada yang cocok (id, id_type) di y.
Ini sangat berbeda, meskipun:
select x.id
from x
left join y
on x.id = y.id
where y.id_type = 'some type'
;
Dalam situasi ini, kami memilih semua baris x dan mencoba mencocokkan dengan baris dari y. Sekarang untuk baris yang tidak cocok dengan y, y.id_type akan menjadi nol. Karena itu, y.id_type ='some type' tidak terpenuhi, sehingga baris yang tidak cocok akan dibuang, yang secara efektif mengubahnya menjadi gabungan dalam.
Singkat cerita:untuk sambungan dalam tidak masalah ke mana syaratnya, tetapi untuk sambungan luar bisa.