Pular para o conteúdo principal

Questão de Banco de Dados — Consultas e Comandos em SQL — CESPE / CEBRASPE 2024

Banco de DadosConsultas e Comandos em SQL
Código
ce403675
Banca
CESPE / CEBRASPE
Órgão
TSE
Ano
2024
Cargo
TJ
Julgue o item seguinte, relativo a linguagem de consulta estruturada (SQL), linguagem de definição de dados (DDL) e linguagem de manipulação de dados (DML). O comando TRUNCATE é mais eficiente que o comando DELETE para remover os registros de uma tabela, no sentido de que não apenas deleta todos os dados da tabela como, também, libera o espaço ocupado pela tabela.
  1. CCerto
  2. EErrado
Revelar gabarito e comentário

GabaritoC — Certo

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

SQL – TRUNCATE × DELETE: eficiência e liberação de espaço

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

TRUNCATE
  • 1DDL
  • 2Remove todas as linhas
  • 3Libera espaço
  • 4Não aceita WHERE
  • 5Não gera log por linha
  • 6DELETE
    • DML
    • Remove linhas (com WHERE)
    • Não libera espaço
    • Gera log por linha
    • Permite ROLLBACK
LEVEL · soulevel.com.br

Item — ✅ CERTO

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.

PEGA ESSA DICA!

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