SQL commands are used to manage data in a database. Two of the most commonly used commands are DELETE and TRUNCATE. Both commands are used to delete data from a table, but there are important differences between them. DELETE is a Data Manipulation Language (DML) command, while TRUNCATE is a Data Definition Language (DDL) command.
DELETE is an SQL command that deletes one or more rows from a table using conditions.
TRUNCATEis an SQL command that removes all rows from a table without using any conditions. SQL Truncate is a data definition language (DDL) command. It deletes all rows in a table by unallocating the pages that are used to store table data.
SQL Server stores data from a table on pages. The TRUNCATE command deletes rows by deallocating pages. It makes an entry for page deallocation in the transaction log, but does not record the deletion of each row in the transaction log. DELETE and TRUNCATE both commands can be used to delete data from the table.
Delete is a DML command, while truncate is a DDL command. Truncate can be used to delete all data from the table without maintaining the integrity of the table. On the other hand, the DELETE statement can be used to delete specific data and cannot bypass integrity enforcement mechanisms. In SQL Server, there are a couple of ways to delete rows from a table. You can use the TRUNCATE and DELETE commands.
Although the end result of both commands is the same, there are very important differences that you should be aware of. The TRUNCATE command deletes rows by deallocating pages and creates an entry for page deallocation in the transaction log. It does not record the deletion of each row in the transaction log. TRUNCATE TABLE removes the data by de-allocating the data pages used to store the table data and records only page deallocations in the transaction log. While TRUNCATE cannot be used on tables involved in transactional replication or merge replication. Rows deleted by the TRUNCATE TABLE statement cannot be restored, and you cannot specify the WHERE clause in the TRUNCATE statement.
DELETE deletes records one by one and makes an entry for each and every deletion in the transaction log, while TRUNCATE deallocates pages and creates an entry for page deallocation in the transaction log. TRUNCATE is all or nothing: it will delete all rows from the table, so it may not be an option if you want to keep some rows. At a high level, you might consider the truncate command to be similar to a DELETE command without a WHERE clause. TRUNCATE cannot be used on tables referenced by FOREIGN KEY constraints, unless it is a table that has a foreign key that references itself. The TRUNCATE command is like a DELETE command without a WHERE clause with a much smaller safety net. TRUNCATE can also be undone as long as it is included in a TRANSACTION block and the session is not closed.
The DELETE statement can have a WHERE clause to delete specific records, while the TRUNCATE statement does not require any and deletes the entire table. When deciding which command to use, it's important to consider your needs carefully. If you need to delete specific records, then DELETE is your best option; if you need to delete all records from a table quickly, then TRUNCATE may be your best choice.