BigQuery/SQL:如果值为NULL,则(value != 'some string') returns false

BigQuery/SQL: If value is NULL, then (value != 'some string') returns false

此查询 return 只有第一行。但是NULL不等于"anything",为什么会是returnFALSE呢?这是某种错误吗?这个逻辑似乎违反直觉。

WITH sample AS (
  SELECT 'something' AS key
  UNION ALL
  SELECT NULL AS key
)

SELECT * FROM sample WHERE key != 'anything'

当您使用 Null Value 然后使用 ISNULL 进行设置。这不是错误。

WITH sample AS (
  SELECT 'something' AS [key]
  UNION ALL
  SELECT NULL AS [key]
)

SELECT * FROM sample WHERE ISNULL([key],'') != 'anything'

除非另有说明,所有运算符return当其中一个操作数为NULL时为NULL

所以,NULL != 'string' returns NULL,这显然不是 TRUE(也不是 FALSE),因此被排除在输出

大家自己看,通过运行

SELECT *, key != 'anything' 
FROM sample 

这就是为什么你应该使用 IFNULL(key, '') != 'anything'

你可以通过运行

看到不同
SELECT *, key != 'anything', ifnull(key, '') != 'anything' 
FROM sample

P.S。您可以查看有关 BigQuery 的更多信息 Operators

What's the benefit of having this kind of logic? Why NULL != 'anything' is not TRUE?

SQL 空值基本上意味着“可以是任何东西”。因此无法判断与 null 的比较是真还是假。这个逻辑是核心 SQL 的一个组成部分,几乎每个 SQL 数据库

都遵循它

将 null 视为一个 missed/absent 数据,其值可以是任何值,因此比较(或其他操作)的结果是未知的,这就是 null