Com uma junção interna, a diferença é apenas uma diferença semântica. Ambas as consultas devem produzir exatamente o mesmo plano de consulta e exatamente o mesmo resultado.
No entanto, quando você está usando associações externas, importa se a condição está no
where
cláusula ou on
a cláusula sobre. 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())
É diferente de
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())
não apenas no nível semântico.
Enquanto a primeira consulta retornará o resultado esperado de uma junção correta, a segunda retornará de fato os resultados esperados de uma junção interna.
Isso ocorre porque os valores corretos da tabela pode ser nulo se você tiver registros na tabela esquerda que não correspondam a eles e, como comparar qualquer valor com nulo (incluindo outro nulo) resultará em falso, é basicamente alterar a junção direita para uma junção interna.