Con una unión interna, la diferencia es solo una diferencia semántica. Ambas consultas deben producir exactamente el mismo plan de consulta y exactamente el mismo resultado.
Sin embargo, cuando usa uniones externas, importa si la condición está en el where
cláusula o on
la cláusula 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())
es diferente a
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())
no solo en el nivel semántico.
Mientras que la primera consulta arrojará el resultado esperado de una combinación correcta, la segunda de hecho arrojará los resultados esperados de una combinación interna.
Eso se debe a que los valores de la tabla correcta podría ser nulo si tiene registros en la tabla de la izquierda que no coinciden, y dado que comparar cualquier valor con nulo (incluido otro nulo) dará como resultado un falso, básicamente está cambiando la unión derecha a una unión interna.