При вътрешно съединение разликата е само семантична разлика. И двете заявки трябва да дадат точно същия план на заявка и точно същия резултат.
Въпреки това, когато използвате външни съединения, тогава има значение дали условието е на where
клауза или on
клаузата on.
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())
Различно е от
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())
не само на семантично ниво.
Докато първата заявка ще върне очаквания резултат от дясно присъединяване, втората всъщност ще върне очакваните резултати от вътрешно присъединяване.
Това е така, защото стойностите на правилната таблица може да е null, ако имате записи в лявата таблица, които не им съответстват, и тъй като сравняването на която и да е стойност с null (включително друга null) ще доведе до false, това по същество променя дясното съединение на вътрешно съединение.