Você tem o equívoco de que o otimizador reescreve a instrução SQL. Esse não é o caso. Reescrever a consulta é o trabalho do reescritor de consulta , que, por exemplo, substitui as visualizações por sua definição. O otimizador apresenta uma sequência de etapas de execução para calcular o resultado. Produz um plano , não uma instrução SQL.
O otimizador planeja duas alternativas:executar o subplano 1 para cada linha encontrada ou executar o subplano 2 uma vez (observe que é independente de
a
), crie uma tabela de hash a partir do resultado e teste esse hash para cada linha encontrada em a
. Em tempo de execução, o PostgreSQL decide usar a última estratégia, por isso o subplano 1 nunca é executado.