外連接消除就是將一個 outer join 轉換成 inner join。
例如下面的查詢適合做外連接消除:
select * from a left join b on a.pk = b.pk where b.col = 3;
它可以被等價地改寫成:
select * from a inner join b on a.pk = b.pk where b.col = 3;
爲什麼呢?因爲這個查詢的結果中不可能出現 b 爲 NULL 的行,假設有這樣的行,它也一定會被 where b.col = 3 過濾掉。這使得使用 outer join 和使用 inner join 的效果等價。
“外連接消除” 最終目的是給優化器帶來更多的靈活性,inner join 可以選擇的優化路徑比 outer join 多得多。