DatabaseStatusSyntax FamilyMin Version
PostgreSQL full returning 8.2
MySQL none - -
MariaDB full returning 10.0.5
Oracle full returning-into -
SQL Server full output -
SQLite full returning 3.35.0
Redshift none - -
DB2 none - -
Snowflake none - -
BigQuery none - -

Compare Databases

Database Details

PostgreSQL full
DELETE FROM sessions
WHERE expires_at < NOW()
RETURNING id, user_id;
  • Works the same as INSERT/UPDATE RETURNING.
Docs: DELETE
MySQL none
  • No RETURNING clause for DELETE.
  • Must SELECT before DELETE to capture deleted rows.
Docs: DELETE
MariaDB full
DELETE FROM sessions
WHERE expires_at < NOW()
RETURNING id, user_id;
  • DELETE ... RETURNING supported since MariaDB 10.0.5.
Oracle full
DELETE FROM t WHERE id = 1 RETURNING col INTO :v;
  • RETURNING...INTO requires a bind variable. Works in PL/SQL or via OCI/JDBC bind parameters. Not usable as plain SQL without a host variable.
  • Multiple rows: RETURNING col BULK COLLECT INTO collection.
Docs: DELETE
SQL Server full
DELETE FROM sessions
OUTPUT DELETED.id, DELETED.user_id
WHERE expires_at < GETDATE();
  • Uses OUTPUT clause with DELETED pseudo-table.
SQLite full
DELETE FROM sessions
WHERE expires_at < datetime('now')
RETURNING id, user_id;
  • Added in SQLite 3.35.0 alongside INSERT/UPDATE RETURNING.
Docs: RETURNING
Redshift none
  • Redshift does not support RETURNING on DELETE. Use a SELECT before the DELETE to capture row data, or use a CTE: WITH deleted AS (SELECT * FROM t WHERE condition) DELETE FROM t USING deleted WHERE t.id = deleted.id.
Docs: DELETE
DB2 none
  • DB2 does not support RETURNING on DELETE. Use SELECT ... FROM OLD TABLE (DELETE FROM t WHERE ...) for a similar effect - the "data change table reference" syntax returns deleted rows. Example: SELECT id, name FROM OLD TABLE (DELETE FROM t WHERE status = 'expired');
Docs: SELECT
Snowflake none
  • Snowflake does not support a RETURNING clause on DELETE. Capture needed data with a SELECT before deleting, or stage data in a temporary table first.
Docs: DELETE
BigQuery none
  • BigQuery does not support RETURNING on DELETE. Use a SELECT or CREATE TABLE AS SELECT to save rows before deletion.