A LEFT JOIN B ON 條件 執行邏輯分兩階段:
ON 條件從 B 表檢索匹配行。若 B 無匹配行,**生成一行全 NULL 的虛擬行** 與 A 表行拼接WHERE 條件過濾結果集**關鍵差異:ON 條件決定「如何匹配」,WHERE 條件決定「保留哪些結果」。**
結果: product 4 行全保留,只有 id=2 匹配到詳情,其餘 3 行詳情列為 NULL。
結果: 僅 1 行(id=2)。WHERE 過濾掉了詳情為 NULL 的行,**實際退化為 INNER JOIN**。
查找「在 B 表中**不存在**匹配行」的 A 表記錄:
當 ON 條件為多條件 ON (A AND B AND C) 時,WHERE b.id IS NULL 等價於:
將基本匹配條件放 ON,否定條件放 WHERE,結果相同:
**僅查詢左表列時兩者等價**。但若 **SELECT \*** 包含右表列,結果不同:
WHERE b.id IS NULL 轉為 NOT EXISTS 子查詢LEFT JOIN ... WHERE IS NULL 通常比 NOT IN 子查詢快(避開 NULL 陷阱)WHERE b.col IS NULL 中 b.col 非主鍵/非 NOT NULL 列 → 可能誤判Using where、Not exists 標記LEFT JOIN 的靈魂在於 **ON 決定匹配邊界,WHERE 決定最終輸出**。理解兩階段執行模型,善用德摩根律拆解複雜 IS NULL 邏輯,是寫出正確、高效關聯查詢的關鍵。