Publish / database · All operations

Delete rows from a table

A variant of Write to a database

Remove the rows of a database table that match keys or a condition.

Status

In arcform

Not built yet

arcform does not do this yet. Its place on the roadmap

What other tools call it

Meridian's classification; an independent blind rating agreed on 95.7% of 324 rows (variant, version 3).

Apache DataFusion (1)
  • DELETEread 2026-09-27

    Remove rows matching a condition from a table; in-memory tables support it

Apache Hop (2)
  • Deleteread 2026-09-27

    Delete database rows whose keys match each input row

  • MongoDB deleteread 2026-09-27

    Delete documents from a MongoDB collection

EasyMorph (2)
KNIME Analytics Platform (2)
  • Delete database rows whose key columns match rows of the input table

  • DB Row Deleterread 2026-09-27

    Delete rows of a database table that match configured filter criteria

Pentaho Data Integration (1)
  • Deleteread 2026-09-27

    Delete rows from a database table

RapidMiner Studio (2)
  • Delete Cassandraread 2026-09-27

    Delete rows from a Cassandra or Astra table by the input ID column

  • Delete MongoDBread 2026-09-27

    Delete documents from a MongoDB collection

Talend (1)

Background

In Structured Query Language (SQL), the DELETE statement removes one or more rows from a table: those matching a condition, or else every row.[1] In PostgreSQL, a DELETE without a WHERE clause deletes all rows in the table, and the result is a valid but empty table.[2] SQL's DELETE cannot remove a single value from a row; UPDATE is used to set that value to NULL instead.[1]

When to use it

In DuckDB, DELETE removes the rows for which the WHERE clause is true, and keeps the rows for which it is false or NULL.[3] In EasyMorph, a Delete database rows query can be previewed to show which rows will be deleted before they are deleted.[4] Run the condition as a SELECT first, and count what it matches, before running the DELETE. (Meridian's view)

EasyMorph's Delete matching database rows action has a mode that deletes the rows whose keys do not match any key in the EasyMorph table.[5] In EasyMorph's non-matching mode, an option checked by default makes the action fail when no row matches, since without it every row of the database table would be deleted.[5] Treat a delete that keeps only what matches as a delete of everything else, and guard it against an empty list of keys. (Meridian's view)

Where a linking table refers to a deleted row, keeping referential integrity can take a second delete from the linking table, unless a trigger has been set up to delete the linked rows automatically.[1] DuckDB does not support foreign keys with cascading deletes (ON DELETE CASCADE).[6] In DuckDB, running DELETE does not reclaim space: rows are generally only marked as deleted, and the space is reclaimed on a CHECKPOINT.[3]

The method

In PostgreSQL, rows can be deleted using information in other tables either with sub-selects or by naming the other tables in a USING clause.[2] EasyMorph's Delete matching database rows action deletes the rows of a database table whose combination of key fields matches one in the EasyMorph table.[5] EasyMorph's delete actions use a SQL DELETE statement and are atomic: either every qualifying row is deleted, or nothing is.[4][5]

Bruin's delete+insert strategy deletes every target row whose value in a chosen key column, its incremental_key, appears in a run's result, then inserts that result, so a new batch replaces the old one.[7]

Compared with the alternatives

In PostgreSQL, TRUNCATE has the same effect as an unqualified DELETE on each table, but is faster because it does not scan the tables, and it reclaims disk space at once.[8] In PostgreSQL, TRUNCATE does not fire ON DELETE triggers.[8] A TRUNCATE TABLE statement cannot take a WHERE clause.[9] In DuckDB, TRUNCATE removes all rows from a table, acting as an alias for DELETE FROM without a WHERE clause.[3] DELETE only deletes rows, while the DROP command deletes a table entirely.[1]