ANSI SQL tiene el IS [NOT] DISTINCT FROM
construcción que aún no se ha implementado en SQL Server (Solicitud de conexión
).
Es posible simular esta funcionalidad
en SQL Server usando EXCEPT
/INTERSECT
sin embargo. Ambos tratan NULL
como iguales en las comparaciones. Desea encontrar filas donde las columnas clave sean las mismas pero las columnas de valor sean diferentes. Así que esto debería funcionar.
SELECT *
FROM SourceTable S
JOIN DestinationTable D
ON S.Key1 = D.Key1
/*Join the key columns on equality*/
AND NOT EXISTS (SELECT S.Key2,
S.Key3
EXCEPT
SELECT D.Key2,
D.Key3)
/*and the value columns on unequality*/
AND NOT EXISTS (SELECT S.Value1,
S.Value2
INTERSECT
SELECT D.Value1,
D.Value2)