首页/数据/SQL 速查/连接键为 NULL 的行不会匹配
本包目录(311 条)

连接键为 NULL 的行不会匹配

NULL 与其他任何值(包括 NULL)比较都是 UNKNOWN:连接键含 NULL 的行在内连接中直接消失,在左连接中保留但补 NULL。

SQL 速查数据更新于 2026-10-12

行为演示

行为演示
-- a.k 为 NULL 的行不会出现在结果里
SELECT a.id, b.name
FROM a
JOIN b ON a.k = b.k;

-- 左连接会保留这些行,右表列补 NULL
SELECT a.id, b.name
FROM a
LEFT JOIN b ON a.k = b.k;
内连接NULL 键行被丢弃
左连接NULL 键行保留、右表补 NULL
设计建议连接键尽量 NOT NULL,或约定哨兵值

易错点

  • 两表都用 NULL 表示“未知归属”,连接结果永远对不上,先做数据归一化
  • 如果业务确实要 NULL 配 NULL,用 <=> 或 IS NOT DISTINCT FROM,但需明确这是有意为之

数据来源与参考

  • MySQL 8.0 Reference Manual · Working with NULL Values
  • PostgreSQL Documentation · Null Values
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌