在 1979年的 Codd提案中(基本上被SQL92采纳),通过论证删除集合操作中的重复项“在比检索操作的评估中的等式测试更低的细节层次上发生”这种语义不一致性是合理的。SQL标准没有明确定义空值的默认排序顺序。相反,在匹配性的系统上,子句 ORDER BY可以分别使用列表 NULLS FIRST或 NULLS LAST,分别在所有数据值之前或之后,对空值进行排序。然而,并非所有数据库供应商都实现了这一功能。不实现此功能的供应商可能会在 DBMS中,为空值的排序指定不同的处理方法。某些 SQL产品不可以创建包含 NULL 的索引键。例如,PostgreSQL 8.3 版本之前 B树索引的文件说明,B-树可以处理数据的等式和范围查询,这些数据可以按照某种顺序排序。特别是,PostgreSQL查询规划器会在使用< ≤ = ≥ > 这些运算符进行比较时,涉及索引列时考虑使用 B-树索引:< ≤ = ≥ > 等效于这些运算符(如 BETWEEN 和 IN)组合的构造也可以用 B-树索引搜索实现。(但请注意,IS NULL 不是等于而且不可索引。):在强制唯一性的创建索引运行情况下,字段为 NULL值会从索引中被排除,并且不会在 NULL之间强制运行唯一性。再次引用 PostgreSQL文件:当索引被宣告是唯一时,将不允许具有相同索引值的多个表行。空值不被视为相等。多列唯一索引只会拒绝所有索引列在两行中相等的情况。这种作法匹配 SQL:2003-标量空值比较的规范。索引空值的另一种方法涉及按照 SQL:2003定义的行为将它们处理为不明显。例如,Microsoft SQL Server文档声明如下:为了创建索引,NULL比较相等。因此,如果键在多行中为 NULL,则无法创建唯一索引或 UNIQUE 约束。当选择唯一索引或唯一约束的列时,选择定义为 NOT NULL 的列。这两种索引策略都与 SQL:2003定义的 Null行为一致。因为索引方法没有被 SQL:2003标准明确定义,所以空值的索引策略完全由供应商来设计和实现。SQL定义了两个函数来显式处理空值:NULLIF 和 COALESCE。这两个函数都是 CASE表达式的缩写。NULLIF 函数接受两个参数。如果第一个参数等于第二个参数,则 NULLIF 返回 Null。否则,返回第一个参数的值。