Sql server 真正空安全比较

Sql server 真正空安全比较,sql-server,tsql,Sql Server,Tsql,在短于此的T-SQL中,是否有一种真正安全的方法来检查两个可空值是否不相等 where A.MyField != B.MyField or ( A.MyField is null and B.MyField is not null ) or ( A.MyField is not null and B.MyField is null ) 使用isnull()并不是真正安全的,因为它会将null值压缩为可能存在于数据集中的“真实”值,例如

在短于此的T-SQL中,是否有一种真正安全的方法来检查两个可空值是否不相等

where
    A.MyField != B.MyField
or  (
        A.MyField is null
    and B.MyField is not null
)
or  (
        A.MyField is not null
    and B.MyField is null
)
使用
isnull()
并不是真正安全的,因为它会将
null
值压缩为可能存在于数据集中的“真实”值,例如:

where
    isnull(A.MyField, '') != isnull(B.MyField, '')
将错误地认为空字符串
'
null
相等,这不是期望的结果。你可以提出一个“已知”的值,它永远不会发生或者非常不可能发生,但是这看起来像是一个创可贴修复。p> 出于几个原因(尤其是该功能正在贬值),将
ANSI_NULLS
设置为off也是不可取的

是否有可以执行“真”空安全检查的功能,或者上面的代码是最好的方法?

WHERE  EXISTS (SELECT A.MyField
               EXCEPT
               SELECT B.MyField)