A consulta #1 não é a maneira elegante de fazer isso... (NOT) IN SELECT é bom para algumas entradas, mas não pode usar índices (
Seq Scan
). Antes de ter EXCEPT... foi assim que foi feito usando um JOIN (
HASH JOIN
): SELECT sp.id
FROM subsource_position AS sp
LEFT JOIN subsource AS s ON (s.postion_id = sp.id)
WHERE
s.postion_id IS NULL
EXCEPT apareceu no Postgres há muito, muito tempo atrás... Mas, por exemplo, usando o MySQL eu acredito que esta ainda é a única maneira de conseguir isso usando junções de índice.