Sorpresa de PostgreSQL: CTE, DELETE y LIMIT inesperados

2025-05-04
Sorpresa de PostgreSQL: CTE, DELETE y LIMIT inesperados

Surgió un comportamiento inesperado en PostgreSQL al usar una Expresión de Tabla Común (CTE) con DELETE ... RETURNING y LIMIT para procesar un lote de elementos. La intención era eliminar solo una fila, pero se eliminaron varias. `EXPLAIN ANALYZE` reveló una optimización de unión semijunta de bucle anidado, haciendo que la cláusula LIMIT 1 se ejecutara varias veces. La solución fue reestructurar la consulta, evitando la CTE y usando una subconsulta directamente en la cláusula WHERE de DELETE. Esto destaca que las CTE no siempre impiden las optimizaciones del plan de consulta, y un examen cuidadoso del plan es crucial para las operaciones críticas.