Hai l'idea sbagliata che l'ottimizzatore riscriva l'istruzione SQL. Questo non è il caso. La riscrittura della query è compito del riscrittore di query , che ad esempio sostituisce le viste con la loro definizione. L'ottimizzatore presenta una sequenza di passaggi di esecuzione per calcolare il risultato. Produce un piano , non un'istruzione SQL.
L'ottimizzatore pianifica due alternative:eseguire il sottopiano 1 per ogni riga trovata o eseguire il sottopiano 2 una volta (notare che è indipendente da a
), crea una tabella hash dal risultato e analizza l'hash per ogni riga trovata in a
.
Al momento dell'esecuzione, PostgreSQL decide di utilizzare quest'ultima strategia, ecco perché il sottopiano 1 non viene mai eseguito.