Questão de Banco de Dados — Consultas e Comandos em SQL — FUNDATEC 2023
Banco de Dados›Consultas e Comandos em SQL
Código
qa538178
Banca
FUNDATEC
Órgão
CAU RS
Ano
2023
Cargo
Ana Sup ( )
PROJETO
ID
DESCRICAO
TIPO
PRAZO_EXECUCAO_DIAS
1
Decoração
A1
10
2
Marcenaria
B2
75
3
Elétrica
A3
60
4
Alvenaria
C1
120
5
Revestimentos
C2
105
6
Hidráulica
A3
45
Qual dos comandos SQL abaixo poderia ser utilizado para excluir apenas os registros da Tabela PROJETO cujo campo PRAZO_EXECUCAO_DIAS seja superior a 60 e inferior a 120?
ADELETE ALL FROM PROJETO WHERE PRAZO_EXECUCAO_DIAS < 60 AND PRAZO_EXECUCAO_DIAS > 120
BDELETE FROM PROJETO WHERE PRAZO_EXECUCAO_DIAS IN (60, 120)
CDELETE * FROM PROJETO WHERE PRAZO_EXECUCAO_DIAS BETWEEN 60 AND 120
DDELETE FROM PROJETO WHERE PRAZO_EXECUCAO_DIAS > 60 AND PRAZO_EXECUCAO_DIAS < 120
EDELETE * FROM PROJETO WHERE PRAZO_EXECUCAO_DIAS >= 60 OR PRAZO_EXECUCAO_DIAS <= 120
Revelar gabarito e comentário▾
GabaritoD — DELETE FROM PROJETO
WHERE PRAZO_EXECUCAO_DIAS > 60
AND PRAZO_EXECUCAO_DIAS < 120
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”.
Comando DELETE no SQL
Gabarito: letra D. O comando DELETE FROM PROJETO WHERE PRAZO_EXECUCAO_DIAS > 60 AND PRAZO_EXECUCAO_DIAS < 120 é o único que atende exatamente ao critério pedido: excluir registros com prazo superior a 60 e inferior a 120 dias. A sintaxe correta do DELETE não usa ALL nem *, e a condição deve combinar os dois limites com o operador lógico AND.
O comando DELETE é a instrução da linguagem SQL responsável por remover linhas de uma tabela. Ele pertence à sublinguagem DML (Data Manipulation Language), que agrupa os comandos que interagem com os dados dentro das tabelas — ao lado de INSERT (inserir) e UPDATE (atualizar). A sintaxe básica é DELETE FROM nome_da_tabela WHERE condição;. Sem a cláusula WHERE, o comando apagaria todas as linhas da tabela — um perigo clássico em provas e na prática.
A cláusula WHERE é o coração da questão: é ela que filtra quais linhas serão afetadas. Para expressar um intervalo exclusivo (valores entre dois limites, sem incluí-los), usamos dois operadores de comparação combinados por AND: campo > 60 AND campo < 120. Isso seleciona apenas os valores 75 e 105 da tabela PROJETO (Marcenaria e Revestimentos).
A banca explora três armadilhas típicas neste tema: (1) a sintaxe errada do DELETE — não existe DELETE ALL FROM nem DELETE * FROM no padrão SQL; (2) a confusão entre intervalo exclusivo (> 60 AND < 120) e inclusivo (BETWEEN 60 AND 120, que incluiria 60 e 120); e (3) a troca dos operadores lógicos AND/OR e dos sinais de comparação, que inverte completamente o conjunto de registros afetados.
Guarde o par sintaxe × condição: é exatamente nele que as alternativas se dividem. A alternativa correta precisa acertar os dois — a forma do comando e a lógica do filtro.
Alternativa A — ❌ Incorreta
Apresenta duas falhas graves. Primeiro, a sintaxe DELETE ALL FROM não existe no padrão SQL — o correto é apenas DELETE FROM. Segundo, a condição PRAZO_EXECUCAO_DIAS < 60 AND PRAZO_EXECUCAO_DIAS > 120 é logicamente impossível: nenhum número pode ser simultaneamente menor que 60 e maior que 120. O comando, se fosse válido, não excluiria nenhum registro.
Alternativa B — ❌ Incorreta
A sintaxe DELETE FROM está correta, mas a condição IN (60, 120) seleciona apenas os registros cujo prazo é exatamente 60 ou exatamente 120 dias. Isso excluiria os projetos Elétrica (60) e Alvenaria (120) — justamente os que não devem ser excluídos, pois o enunciado pede valores superiores a 60 e inferiores a 120. O operador IN verifica pertencimento a uma lista de valores específicos, não a um intervalo.
Alternativa C — ❌ Incorreta
A sintaxe DELETE * FROM está errada — o * (asterisco) é usado no SELECT * para indicar "todas as colunas", mas não faz parte da sintaxe do DELETE. Além disso, o operador BETWEEN 60 AND 120 é inclusivo: inclui os extremos 60 e 120. O comando excluiria os projetos Elétrica (60) e Alvenaria (120), que deveriam ser preservados. O critério pedido é um intervalo exclusivo (superior a 60 e inferior a 120), que o BETWEEN não atende.
Alternativa D — ✅ Correta ⟵ GABARITO
A sintaxe DELETE FROM PROJETO está correta, e a condição PRAZO_EXECUCAO_DIAS > 60 AND PRAZO_EXECUCAO_DIAS < 120 expressa exatamente o intervalo exclusivo pedido: valores maiores que 60 e menores que 120. Aplicando à tabela, seriam excluídos apenas os registros com prazo 75 (Marcenaria) e 105 (Revestimentos). O operador AND exige que ambas as condições sejam verdadeiras simultaneamente, o que é a lógica correta para um intervalo.
Alternativa E — ❌ Incorreta
Apresenta dois erros. Primeiro, a sintaxe DELETE * FROM é inválida. Segundo, e mais grave, o operador lógico usado é OR em vez de AND: a condição PRAZO_EXECUCAO_DIAS >= 60 OR PRAZO_EXECUCAO_DIAS <= 120 é verdadeira para qualquer valor de prazo — todo número é maior ou igual a 60 ou menor ou igual a 120. Na prática, o comando excluiria todos os registros da tabela PROJETO, o que contraria totalmente o enunciado.
NÃO CAIA NESSA!
A banca adora inverter os operadores lógicos e os sinais de comparação para confundir. Aqui, a alternativa E troca o AND por OR, o que transforma o filtro em uma condição que aceita tudo — e o candidato que lê rápido marca sem perceber que o comando apagaria a tabela inteira. Fique atento: para um intervalo, o AND é obrigatório; o OR só é usado para unir condições alternativas.
NÃO CAIA NESSA!
Na hora da prova, monte mentalmente a "reta numérica" do intervalo. Para "superior a 60 e inferior a 120", desenhe os limites abertos (bolinha vazia) e veja quais valores caem no meio. Depois, confira a sintaxe: DELETE FROM (sem ALL, sem *) + WHERE com a condição correta. Essa checagem em dois passos elimina as pegadinhas de sintaxe e de lógica.
Gabarito: letra D — a única que combina a sintaxe correta do DELETE com a condição de intervalo exclusivo (> 60 AND < 120).