S vnitřním spojením je rozdíl pouze sémantickým rozdílem. Oba dotazy by měly produkovat přesně stejný plán dotazů a přesně stejný výsledek.
Pokud však používáte vnější spojení, pak záleží na tom, zda je podmínka na where
klauzule nebo on
klauzule o.
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())
Liší se od
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())
nejen na sémantické úrovni.
Zatímco první dotaz vrátí očekávaný výsledek pravého spojení, druhý ve skutečnosti vrátí výsledky očekávané od vnitřního spojení.
To proto, že hodnoty pravé tabulky může být null, pokud máte v levé tabulce záznamy, které se s nimi neshodují, a protože porovnání jakékoli hodnoty s hodnotou null (včetně jiné hodnoty null) bude mít za následek nepravdu, v podstatě se změní pravé spojení na vnitřní spojení.