はじめに WHERE句で=演算子の左辺・右辺に同じ列名を指定したクエリを考えます。 SELECT count(*) FROM seq WHERE value = value;これは以下のクエリと等価です。 SELECT count(*) FROM seq WHERE value IS NOT NULL;value = value で value = NULL であれば、NULL = NULL となり、これは unknown と評価されるためです。 NULL に比較述語を適用した結果が、常に unknown になってしまうからです。クエリの結果として選択されるのは、WHERE句の条件評価がtrueになる行のみです。false や unknown の行は選択されません。 引用:達人に学ぶ SQL徹底指南書 1-3 3値論理とNULL 達人に学ぶ SQL徹底指南書 (CodeZine BOOKS
![PostgreSQL にてWHERE句で=演算子の左辺・右辺に同じ列名を指定すると行数推定が不正確になることがある - ぱと隊長日誌](https://cdn-ak-scissors.b.st-hatena.com/image/square/d60d245a77ec06411cafc141e950ce6628fc27b2/height=288;version=1;width=512/https%3A%2F%2Fimages-fe.ssl-images-amazon.com%2Fimages%2FI%2F51CGypjLrvL._SL160_.jpg)