Cláusula RETURNING
Extensión de PostgreSQL: INSERT/UPDATE/DELETE devuelven las filas modificadas. INSERT INTO users (name) VALUES ('Alice') RETURNING id, created_at — evita un SELECT aparte tras el INSERT para obtener el ID autogenerado. Estandarizada en SQL:2023, pero es una función de Postgres desde la versión 8.2 (2006).
Caso de uso: obtener la clave primaria autogenerada tras un INSERT (alternativa: LAST_INSERT_ID() en MySQL). UPDATE ... RETURNING: recuperar los valores previos para auditoría. DELETE ... RETURNING: limpiar y a la vez informar de qué se borró. Se combina con CTE: WITH inserted AS (INSERT ... RETURNING *) SELECT * FROM inserted JOIN .... Rendimiento: un solo viaje de ida y vuelta frente a un INSERT y un SELECT por separado. MySQL: la sintaxis RETURNING llegó primero a MariaDB 10.5 (2020); MySQL 8.x todavía no la tiene (2024). Los ORM (SQLAlchemy, Django) usan RETURNING por debajo cuando está disponible.