Med en indre sammenføjning er forskellen kun en semantisk forskel. Begge forespørgsler skal producere nøjagtig den samme forespørgselsplan og nøjagtigt det samme resultat.
Men når du bruger outer joins, er det vigtigt, om betingelsen er 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())
Er anderledes end
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())
ikke kun på det semantiske niveau.
Mens den første forespørgsel vil returnere det forventede resultat af en højre joinforbindelse, vil den anden i virkeligheden returnere de forventede resultater fra en indre joinforbindelse.
Det skyldes, at de rigtige tabelværdier kan være null, hvis du har poster i den venstre tabel, der ikke matcher dem, og da sammenligning af en værdi med null (inklusive en anden null) vil resultere med en falsk, er det dybest set at ændre den højre join til en indre join.