作者:瀚高PG实验室 (Highgo PG Lab)- 海无涯
要检查一个值是否为空,使用下面的结构:

expression IS NULL
expression IS NOT NULL

或者等效,但并不标准的结构:

expression ISNULL
expression NOTNULL

不要写 expression = NULL ,因为 NULL 是不“等于” NULL 的(控制代表一个未知的值,因此我们无法知道两个未知的数值是否相等)。这种行为符合 SQL 标准。
提示: 有些应用可能要求表达式 expression = NULL 在 expression 得出空值时返回真。我们强烈建议这样的应用修改成遵循 SQL 标准。但是,如果这样修改不可能完成,那么我们可以使用配置变量transform_null_equals。如果打开它,PostgreSQL将把 x = NULL 子句转换成 x IS NULL 。

注意: 如果 expression 是行值,那么当行表达式本身为非空值或者行的所有域为非空时 IS NULL 为真。由于这种行为, IS NULL 和 IS NOT NULL 并不总是为行值表达式返回反转的结果,即一个同时包含 NULL 和非空值的行值表达式将会对两种测试都返回假。这种定义符合 SQL 标准,它是一个对PostgreSQL 8.2之前版本中的不一致行为的修改。
当任何一个输入为空时,普通比较操作符得到空值(代表“未知”),不是真也不是假。例如, 7 = NULL 得到空, 7 <> NULL 也一样。当这种行为不合适时,使用 IS [ NOT ]
DISTINCT FROM 结构:

expression IS DISTINCT FROM expression
expression IS NOT DISTINCT FROM expression

对于非空输入, IS DISTINCT FROM 与 <> 操作符相同。但是,假如两个输入都是空,那么它将返回假,而如果只有一个输入是空,那么它将返回真。相似地,对于非空输入 IS NOT DISTINCT FROM 和 = 是一样的,但是它在两个输入为空时返回真,只有一个输入为空是返回假。所以,这些结构实际上表现得似乎空值是一个普通数据值,而不是“未知”。布尔值也可以使用下列结构进行测试:

expression IS TRUE
expression IS NOT TRUE
expression IS FALSE
expression IS NOT FALSE
expression IS UNKNOWN
expression IS NOT UNKNOWN

这些结构将总是返回真或假,从来不返回空值,即使操作数是空也如此。空值输入被当做逻辑值“未知”。 请注意实际上 IS UNKNOWN 和 IS NOT UNKNOWN 分别与 IS NULL 和 IS NOT NULL 相同, 只是输入表达式必须是布尔类型。