Questão de Banco de Dados — SQL — Quadrix 2025
- Código
- qg600093
- Banca
- Quadrix
- Órgão
- CRO-SP
- Ano
- 2025
- Nível
- Superior
- Cargo
- Analista de Suporte de Tecnologia de Informação
- CCerto
- EErrado
GabaritoE — Errado
Gabarito: ERRADO (letra E). O comando DELETE FROM pacientes; remove todas as linhas (registros) da tabela pacientes, mas mantém a estrutura da tabela (colunas, tipos, constraints) no banco de dados. Para remover permanentemente a tabela e seus dados, o comando correto é DROP TABLE pacientes;. A afirmação confunde o comando DML DELETE com o comando DDL DROP.
O SQL é dividido em sublinguagens, cada uma com uma função específica. A DML (Data Manipulation Language) é responsável por manipular os dados armazenados nas tabelas — inserir, atualizar, excluir e consultar registros. Já a DDL (Data Definition Language) é responsável por definir e modificar a estrutura dos objetos do banco — criar, alterar e excluir tabelas, índices, views, etc. Essa distinção é fundamental para entender o que cada comando faz.
O comando DELETE é um comando DML. Ele exclui linhas de uma tabela, podendo ser usado com uma cláusula WHERE para filtrar quais registros serão removidos. Se usado sem WHERE, como no enunciado (DELETE FROM pacientes;), ele remove todas as linhas da tabela, mas a tabela em si continua existindo, com sua estrutura intacta. É possível, inclusive, desfazer a operação com ROLLBACK se estiver dentro de uma transação (dependendo do SGBD e da configuração).
O comando DROP é um comando DDL. Ele remove completamente um objeto do banco de dados, incluindo a tabela e todos os seus dados, de forma irreversível (na maioria dos SGBDs, não é possível desfazer com ROLLBACK). A sintaxe é DROP TABLE pacientes;.
Existe ainda o comando TRUNCATE, que também é DDL (em alguns SGBDs) e remove todas as linhas de uma tabela de forma mais rápida que DELETE, mas também mantém a estrutura da tabela. A diferença prática entre DELETE e TRUNCATE é que o DELETE pode ser filtrado com WHERE e pode ser desfeito com ROLLBACK (se em transação), enquanto o TRUNCATE remove tudo de uma vez e não pode ser desfeito.
A pegadinha da banca é justamente confundir o efeito do DELETE (remove dados, mantém estrutura) com o do DROP (remove estrutura e dados). O candidato que não domina a diferença entre DML e DDL tende a marcar "Certo", achando que DELETE FROM apaga a tabela inteira.
Guarde a fronteira: DML manipula dados; DDL manipula estrutura. É exatamente nessa fronteira que a questão se decide.
Critério | DELETE | TRUNCATE | DROP |
|---|---|---|---|
Categoria | DML | DDL (na maioria dos SGBDs) | DDL |
O que remove | Linhas (dados) | Todas as linhas | Tabela inteira (estrutura + dados) |
Estrutura da tabela | Mantém | Mantém | Remove |
Filtro WHERE | [+] Permite | [-] Não permite | [-] Não permite |
ROLLBACK | [+] Possível (em transação) | [-] Não possível (na maioria) | [-] Não possível |
A afirmação diz que DELETE FROM pacientes; remove permanentemente a tabela pacientes e seus dados. Isso está errado porque:
O comando DELETE é um comando DML (Data Manipulation Language), que atua sobre os dados (linhas) da tabela.
DELETE FROM pacientes; sem cláusula WHERE remove todas as linhas da tabela, mas a estrutura da tabela (colunas, tipos, constraints) permanece intacta.
Para remover a tabela e seus dados permanentemente, o comando correto é DROP TABLE pacientes;, que é um comando DDL (Data Definition Language).
Portanto, a afirmação está incorreta, pois confunde o efeito do DELETE com o do DROP.
Para não errar mais, decore a tríade: DELETE = remove linhas (DML), TRUNCATE = remove todas as linhas rapidamente (DDL em muitos SGBDs), DROP = remove a tabela inteira (DDL). Na prova, quando a questão falar em "remover a tabela", o comando é DROP; quando falar em "remover registros", é DELETE ou TRUNCATE.
Gabarito: ERRADO (letra E).
Link permanente: /questoes/qg600093