Med en inre sammanfogning är skillnaden bara en semantisk skillnad. Båda frågorna bör ge exakt samma frågeplan och exakt samma resultat.
Men när du använder yttre kopplingar spelar det roll om villkoret är på where
klausul eller on
on-klausulen.
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())
Är annorlunda än
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())
inte bara på den semantiska nivån.
Medan den första frågan kommer att returnera det förväntade resultatet av en högerkoppling, kommer den andra att returnera resultatet som förväntas från en inre koppling.
Det beror på att rätt tabellvärden kan vara null om du har poster i den vänstra tabellen som inte matchar dem, och eftersom att jämföra ett värde med null (inklusive en annan null) kommer att resultera med en falsk, är det i princip att ändra den högra joinen till en inre join.