# [shorts] Saiba a diferença entre DELETE e TRUNCATE - Banco de Dados

> Esses dias bateu a curiosidade de saber a diferença entre os comando SQL TRUCANTE e DELETE. Apesar de pequena a primeiro momento, encontrei e entendi...

- URL: https://iagofrota.com.br/blog/shorts-saiba-a-diferenca-entre-delete-e-truncate-banco-de-dados/
- Data: 2023-03-23
- Tags: banco-de-dados, delete, truncate

Esses dias bateu a curiosidade de saber a diferença entre os comando SQL `TRUCANTE` e `DELETE`. Apesar de pequena a primeiro momento, encontrei e entendi a explicação para utilizar um ou outro dependendo da situação.

Borá lá ( ͡👁️ ͜ʖ ͡👁️)

# Comparativo entre DELETE e TRUNCATE

| **Comparação** | **DELETE** | **TRUNCATE** |
| --- | --- | --- |
| Tipo | [DML (Data Manipulation Language)](https://pt.stackoverflow.com/a/262868/31086) | [DLL (Data Definition Language)](https://pt.stackoverflow.com/a/262868/31086) |
| `WHERE` | Pode ser utilizado a clausula `WHERE` para especificar as tuplas ( ou linhas, registros, ...) | Não tem a opção de usar a clausula `WHERE` e irá apagar todas as tuplas |
| locks | Será dado lock para cada linha que for ser excluída (requer mais recursos) | Será dado lock somente na data page (requer menos recursos) |
| Velocidade | É mais lenta devido fazer operações linha a linha e fazer muito uso de log | É mais rápido por registrar apenas o data page e fazer menos uso do log |
| Reverter | É possível dar `ROLLBACK` e desfazer a operação de exclusão | Não é possível reverter a operação de exclusão |

> **`TRUNCATE`** é mais eficiente e performático para excluir tuplas sem especificar um filtro (cláusula `WHERE`)  
> `**DELETE**` é mais lento, porém consigo dar `ROLLBACK` e reverter a operação
> 
> TRUNCATE vs delete

# Conclusão

A minha intenção foi mostrar o comparativo entre os comandos e dar uma maior compressão dos motivos de se utilizar um ou outro. Espero que eu tenha conseguido clarear essa diferença.
