`NULL` 表示「缺失/未知」,導致三值邏輯 (TRUE/FALSE/UNKNOWN),是 SQL 最常見的 Bug 來源。
| 情境 | 錯誤寫法 | 正確寫法 |
|---|---|---|
| 判斷是否為 NULL | `col = NULL` / `col != NULL` | `col IS NULL` / `col IS NOT NULL` |
| 比較兩欄位是否不同 | `col1 != col2` (含 NULL 失效) | `col1 IS DISTINCT FROM col2` (標準 SQL) |
| `NOT IN` 子查詢含 NULL | `WHERE id NOT IN (SELECT ...)` 子查詢有 NULL → 結果為空 | 改用 `NOT EXISTS` 或 `LEFT JOIN ... IS NULL` |
| 排序 `DESC` 時 NULL 排首位 | `ORDER BY score DESC` | `ORDER BY COALESCE(score,0) DESC` 或 `ORDER BY score DESC NULLS LAST` (PG/Oracle) |
-- 醜陋的 CASE 寫法 SELECT CASE WHEN num_users=0 THEN 0 ELSE total_sales/num_users END; -- 優雅的 NULLIF + COALESCE SELECT COALESCE(total_sales / NULLIF(num_users, 0), 0);