Comportamento Inesperado do PostgreSQL: CTEs, DELETE e LIMIT
2025-05-04

Um comportamento surpreendente do PostgreSQL surgiu ao usar uma Expressão de Tabela Comum (CTE) com DELETE ... RETURNING e LIMIT para processar um lote de itens. A intenção era deletar apenas uma linha, mas várias linhas foram deletadas. `EXPLAIN ANALYZE` revelou uma otimização de junção semi-join de loop aninhado, fazendo com que a cláusula LIMIT 1 fosse executada várias vezes. A solução foi reestruturar a consulta, evitando a CTE e usando uma subconsulta diretamente na cláusula WHERE do DELETE. Isso destaca que CTEs nem sempre impedem otimizações do plano de consulta, e um exame cuidadoso do plano é crucial para operações críticas.
Desenvolvimento
Otimização de Consulta