Questão de Banco de Dados — Consultas e Comandos em SQL — CESPE / CEBRASPE 2024
- Código
- ce403675
- Banca
- CESPE / CEBRASPE
- Órgão
- TSE
- Ano
- 2024
- Cargo
- TJ
- CCerto
- EErrado
GabaritoC — Certo
Gabarito: Certo. O comando TRUNCATE é mais eficiente que o DELETE para remover todos os registros de uma tabela, pois, além de apagar os dados, libera o espaço ocupado pela tabela, enquanto o DELETE apenas remove as linhas, mantendo o espaço alocado. Essa é a distinção central que a questão explora.
O TRUNCATE e o DELETE são comandos SQL usados para remover dados de uma tabela, mas operam de maneiras fundamentalmente diferentes. O TRUNCATE é um comando da DDL (Data Definition Language), que remove todas as linhas de uma tabela de uma só vez, sem registrar cada exclusão individualmente no log de transações. Isso o torna extremamente rápido, pois não gera tantos registros de log e não pode ser usado com uma cláusula WHERE — ele apaga tudo ou nada. Além disso, o TRUNCATE redefine a tabela, liberando o espaço físico que ela ocupava, o que é uma grande vantagem em termos de gerenciamento de armazenamento.
Por outro lado, o DELETE é um comando da DML (Data Manipulation Language), que remove linhas de uma tabela de forma mais granular. Ele pode ser usado com uma cláusula WHERE para excluir apenas registros específicos, e cada linha excluída é registrada no log de transações, o que permite o uso de ROLLBACK para desfazer a operação. No entanto, essa granularidade e o registro no log tornam o DELETE mais lento, especialmente quando se remove um grande volume de dados. Além disso, o DELETE não libera o espaço ocupado pela tabela; ele apenas marca as linhas como excluídas, e o espaço permanece alocado para a tabela até que uma operação de otimização seja executada.
A diferença crucial está na forma como cada comando lida com o espaço e o log. O TRUNCATE é mais eficiente porque opera em nível de tabela, liberando o espaço de uma vez, enquanto o DELETE opera em nível de linha, mantendo o espaço alocado. Essa é a razão pela qual o TRUNCATE é preferido quando se deseja remover todos os dados de uma tabela rapidamente, sem a necessidade de desfazer a operação.
A banca explora exatamente essa distinção: o candidato pode confundir o TRUNCATE com o DELETE, achando que ambos liberam espaço ou que ambos podem ser usados com WHERE. A pegadinha está em reconhecer que o TRUNCATE é um comando DDL que libera espaço, enquanto o DELETE é um comando DML que não o faz. Guarde essa fronteira: TRUNCATE = rápido, libera espaço, não pode ser filtrado; DELETE = mais lento, não libera espaço, pode ser filtrado.
Critério | TRUNCATE | DELETE |
|---|---|---|
Categoria | DDL | DML |
Uso com WHERE | Não (remove todas as linhas) | Sim (remove linhas específicas) |
Registro no log | Mínimo (não registra cada linha) | Registra cada linha excluída |
Liberação de espaço | Sim (libera o espaço ocupado pela tabela) | Não (mantém o espaço alocado) |
Possibilidade de ROLLBACK | Geralmente não | Sim |
A afirmação está correta. O TRUNCATE é mais eficiente que o DELETE para remover todos os registros de uma tabela, pois não apenas deleta os dados, mas também libera o espaço ocupado pela tabela. O DELETE remove as linhas, mas o espaço permanece alocado, exigindo uma operação adicional para liberá-lo. Essa é a característica que torna o TRUNCATE mais eficiente em termos de desempenho e gerenciamento de armazenamento.
Para diferenciar TRUNCATE e DELETE na prova, lembre-se: TRUNCATE é DDL, não pode ser filtrado com WHERE, não pode ser desfeito com ROLLBACK (na maioria dos SGBDs) e libera o espaço da tabela. DELETE é DML, pode ser filtrado, pode ser desfeito e não libera o espaço. Se a questão mencionar "liberação de espaço", a resposta quase sempre aponta para o TRUNCATE.
Gabarito: Certo
Link permanente: /questoes/ce403675