两个值怎么可能相等,但也不相等?

Kni*_*ins 2 sql t-sql sql-server

当我运行以下查询时:

DECLARE 
    @val VARCHAR(10) = 'not null'
    , @val2 VARCHAR(10) = NULL

-- Test 1.
IF @val <> @val2 SELECT 'Test 1. They are not equal' -- Are they equal?
ELSE SELECT 'Test 1. They are equal'

-- Test 2.
IF @val = @val2 SELECT 'Test 2. They are equal' -- Are they not equal
ELSE SELECT 'Test 2. They are not equal'
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

Test 1. They are equal
Test 2. They are not equal
Run Code Online (Sandbox Code Playgroud)

请有人解释这些结果吗?

Mic*_*zyn 5

这是因为 SQL 中的三值逻辑。任何与NULLvalue 的比较都会评估为unknown,这可以被认为是不正确的(很明显,当这样说时)。

参考这篇文章。

  • 虽然未知是正确的,但我强烈反对称其为假。因为在三值逻辑中,未知与假有很大不同。正如您的链接所论证的那样。(链接中的第6章) (4认同)