BigQuery COUNT(*) ... WHERE NOT (...) returns 令人困惑的结果

BigQuery COUNT(*) ... WHERE NOT (...) returns confusing results

我有一个 table 和 device 列,它可以是 'P'、'T' 或 NULL,但是像 device NOT IN('P', 'T') 这样的条件似乎错过了带有 NULL 的行。可以通过以下查询进行演示

$ bq query 'SELECT count(*) FROM t'
+----------+
|   f0_    |
+----------+
| 29542063 |
+----------+
$ bq query "SELECT count(*) FROM t WHERE device = 'P' OR device = 'T'"
+---------+
|   f0_   |
+---------+
| 8268436 |
+---------+
$ bq query "SELECT count(*) FROM t WHERE NOT (device = 'P' OR device = 'T')"
+-----+
| f0_ |
+-----+
|   0 |
+-----+
$ bq query "SELECT count(*) FROM t WHERE device IS NULL"
+----------+
|   f0_    |
+----------+
| 21273627 |
+----------+

为什么查询 WHERE NOT returns 0IS NULL 一个 returns 正确的结果?

"Why the query with WHERE NOT returns 0 while IS NULL one returns correct result?"

因为

SELECT null != 'anything'

returns'null',不是'false'。