Dengan gabungan dalam, perbedaannya hanyalah perbedaan semantik. Kedua kueri harus menghasilkan rencana kueri yang sama persis dan hasil yang sama persis.
Namun, ketika Anda menggunakan gabungan luar, maka penting jika kondisinya ada di where
klausa atau on
klausa aktif.
UPDATE li
SET li.Description = im.Description
FROM tbSupplierLineItem li
RIGHT JOIN tbIMPACArchieveNew im ON li.ItemId = im.CommomCode
AND li.ProcessedDate >= CONVERT(DATE,GETDATE())
Berbeda dengan
UPDATE li
SET li.Description = im.Description
FROM tbSupplierLineItem li
RIGHT JOIN tbIMPACArchieveNew im ON li.ItemId = im.CommomCode
WHERE li.ProcessedDate >= CONVERT(DATE,GETDATE())
tidak hanya pada tingkat semantik.
Sementara kueri pertama akan mengembalikan hasil yang diharapkan dari gabungan kanan, yang kedua sebenarnya akan mengembalikan hasil yang diharapkan dari gabungan dalam.
Itu karena nilai tabel yang tepat mungkin nol jika Anda memiliki catatan di tabel kiri yang tidak cocok, dan karena membandingkan nilai apa pun dengan nol (termasuk nol lainnya) akan menghasilkan false, pada dasarnya mengubah gabungan kanan menjadi gabungan dalam.