Tiene la idea errónea de que el optimizador reescribe la instrucción SQL. Ese no es el caso. Reescribir la consulta es el trabajo del reescritor de consultas , que por ejemplo reemplaza las vistas con su definición. El optimizador presenta una secuencia de pasos de ejecución para calcular el resultado. Produce un plan , no una instrucción SQL.
El optimizador planea dos alternativas:ejecutar el subplan 1 para cada fila encontrada o ejecutar el subplan 2 una vez (tenga en cuenta que es independiente de a
), cree una tabla hash a partir del resultado y pruebe ese hash para cada fila encontrada en a
.
En tiempo de ejecución, PostgreSQL decide utilizar esta última estrategia, por lo que el subplan 1 nunca se ejecuta.