Benedito, > Não sei se minha pergunta é boba, mas: > Porque fazer desse jeito é mais eficiente do que fazer um LEFT JOIN?
A pergunta não é boba não, na realidade a explicação não é nada trivial. A resposta mais simples e curta que posso dar é: esse jeito (UNION ALL + INNER + NOT EXISTS) é mais eficiente porque o otimizador não tem inteligência suficiente para notar que são equivalentes. Em alguns casos simples, alguns bancos de dados fazem a conversão automaticamente e procuram por um plano otimizado. Em casos mais complicados, nem todo otimizador consegue. Talvez para você ainda reste a pergunta "tá mas por quê fazer 4 unions é mais rápido que um OUTER?". Neste caso a resposta também não é trivial: É que ao dividir a consulta em 4 menores, o servidor pode usar um índice diferente (muitas vezes de uma das tabelas filhas) para cada uma das subconsultas ao invés de percorrer a tabela principal sequencialmente. É exatamente essa habilidade de escolher índices pelo volume da tabela filha que pode tornar a consulta infinitamente mais rápida. Atenciosamente, Mozart Hasse _______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
