左连接上的SQL大小写为null

左连接上的SQL大小写为null,sql,sql-server,left-join,case,sql-null,Sql,Sql Server,Left Join,Case,Sql Null,我试图创建一个比较查询,方法是将新数据左键连接到原始数据并比较输出。我的查询非常简单,但似乎无法让它实现我想要的。我知道我不能像其他值那样比较NULL值,但我希望通过执行ISNULL可以得到我需要的结果: SELECT O.Ded1, ISNULL(N.Ded2, 0) AS Ded2, CASE WHEN O.Ded1 = N.Ded2 THEN 'Correct' ELSE 'Inco

我试图创建一个比较查询,方法是将新数据左键连接到原始数据并比较输出。我的查询非常简单,但似乎无法让它实现我想要的。我知道我不能像其他值那样比较NULL值,但我希望通过执行ISNULL可以得到我需要的结果:

SELECT  O.Ded1,         
        ISNULL(N.Ded2, 0) AS Ded2,      
        CASE
          WHEN O.Ded1 =  N.Ded2 THEN 'Correct' 
          ELSE 'Incorrect'
        END AS 'DED CHECK'

FROM #Tmp_ORIG_DATA O

LEFT JOIN #Tmp_NEW_DATA N ON O.ID = N.ID
我想知道是否需要将这些值插入临时表以使其成为物理值

提前谢谢

很抱歉,我应该添加此查询的结果:

我真的希望支票上写的是正确的


谢谢

您明确地检查了空值。需要进行额外的检查,以区分不匹配行和
Ded2
null
的匹配行

SELECT  
    O.Ded1,         
    N.Ded2,      
    CASE
        WHEN O.Ded1 =  N.Ded2
            OR (N.ID IS NOT NULL AND o.Ded1 IS NULL AND N.Ded2 IS NULL) 
        THEN 'Correct' 
        ELSE 'Incorrect'
    END AS 'DED CHECK'
FROM #Tmp_ORIG_DATA O
LEFT JOIN #Tmp_NEW_DATA N ON O.ID = N.ID

#Tmp_ORIG_DATA
是如何定义的?
NULL
不等于任何其他值,包括
NULL
NULL=NULL
返回UNKNOWN,这(重要的)不是真的。如果您需要在两个值都为
NULL
的情况下进行比较,那么使用`IS NULL`和
COL1为NULL,COL2为NULL
。谢谢大家,我刚刚添加了我当前得到的结果的图像。Larnu-原始数据中没有NULL值。所以它比较0和Null,但我认为通过添加ISNULL(..,0)可以解决这个问题?预期的结果很好,但我们也需要样本表数据-我们大多数人希望它是格式化文本,而不是图像。