Questão de Banco de Dados — Consultas e Comandos em SQL — CESPE / CEBRASPE 2025
- Código
- ce417288
- Banca
- CESPE / CEBRASPE
- Órgão
- EMBRAPA
- Ano
- 2025
- Cargo
- Ana ( )
- CCerto
- EErrado
GabaritoE — Errado
Gabarito: Errado. A instrução DELETE é um comando da DML (Data Manipulation Language) que remove linhas (tuplas) de uma tabela, e não colunas. Para remover colunas inteiras, o comando correto é o ALTER TABLE ... DROP COLUMN, que pertence à DDL (Data Definition Language). A afirmação do enunciado confunde a finalidade do DELETE com a do ALTER.
O SQL é dividido em sublinguagens, cada uma com responsabilidades distintas. A DDL (Data Definition Language) lida com a estrutura dos objetos do banco (tabelas, colunas, índices, visões) — seus comandos principais são CREATE, ALTER e DROP. Já a DML (Data Manipulation Language) lida com os dados armazenados nessas estruturas — seus comandos são INSERT, UPDATE e DELETE. Essa separação é fundamental: enquanto a DDL altera o esquema (a definição da tabela), a DML altera o conteúdo (as linhas).
O comando DELETE tem a seguinte sintaxe básica:
DELETE FROM nome_da_tabela WHERE condição;Ele remove linhas inteiras que satisfazem a condição do WHERE. Se a condição for omitida, todas as linhas da tabela são removidas, mas a estrutura da tabela (colunas, tipos, restrições) permanece intacta. Para remover uma coluna, o comando é:
ALTER TABLE nome_da_tabela DROP COLUMN nome_da_coluna;Esse comando altera a definição da tabela, eliminando permanentemente a coluna e todos os seus dados. A confusão entre DELETE e ALTER é clássica em provas: o candidato que não domina a distinção entre DML e DDL tende a aceitar a afirmação como correta.
Outro comando que costuma gerar confusão é o TRUNCATE, que também remove todas as linhas de uma tabela, mas de forma mais rápida que o DELETE (por não registrar cada exclusão individualmente) e sem permitir filtro por WHERE. O TRUNCATE é classificado como DDL em muitos SGBDs, justamente por reiniciar a estrutura (como contadores de auto-incremento).
A pegadinha da questão está em associar DELETE à remoção de colunas, quando na verdade ele opera sobre linhas. Para fixar:
Comando | Sublinguagem | O que remove | Estrutura da tabela |
|---|---|---|---|
| DML | Linhas (tuplas) | Mantida |
| DDL (na maioria dos SGBDs) | Todas as linhas | Mantida (mas reinicia contadores) |
| DDL | Tabela inteira (estrutura + dados) | Removida |
| DDL | Coluna específica | Alterada (coluna removida) |
Guarde essa fronteira: DML mexe nos dados, DDL mexe na estrutura. É exatamente nela que a afirmação do enunciado falha.
A afirmação diz que o DELETE pode remover colunas inteiras de uma tabela. Isso é incorreto: o DELETE é um comando DML que remove linhas, não colunas. Para remover uma coluna, o comando correto é ALTER TABLE ... DROP COLUMN, da DDL. O DELETE apenas apaga registros (tuplas) que atendem à condição do WHERE, mantendo a estrutura da tabela inalterada. Se a intenção é "apagar" apenas os valores de uma coluna (sem remover a coluna), o comando adequado é o UPDATE, atribuindo NULL aos campos desejados.
Gabarito: Errado.
Link permanente: /questoes/ce417288