为什么"Null Like X"和"Not(Null Like X)"相同?

Tip*_*ipx 3 sql null sql-like

我理解为什么这两个陈述是错误的

NULL LIKE 'X'
NULL NOT LIKE 'X'
Run Code Online (Sandbox Code Playgroud)

但是,我不明白为什么这些是:

NOT (NULL LIKE 'X')
NOT (NULL NOT LIKE 'X')
Run Code Online (Sandbox Code Playgroud)

例如,我认为这两个语句应该返回不同的值:

SELECT CASE WHEN NOT (NULL LIKE 'X') THEN 'True' ELSE 'False' END
SELECT CASE WHEN     (NULL LIKE 'X') THEN 'True' ELSE 'False' END
Run Code Online (Sandbox Code Playgroud)

rua*_*akh 7

SQL使用三值逻辑.你说这些都是假的:

NULL LIKE 'X'
NULL NOT LIKE 'X'
NOT (NULL LIKE 'X')
NOT (NULL NOT LIKE 'X')
Run Code Online (Sandbox Code Playgroud)

但事实并非如此.它们都是空的,既不是也不是假.

一个WHEN或者WHERE子句拒绝非真值,这意味着空值和假值,所以看起来像null和false一样,但正如你所注意到的,它不是.:-)