Questão de Banco de Dados — SQL — Quadrix 2024
- Código
- qg347818
- Banca
- Quadrix
- Órgão
- COREN-PR
- Ano
- 2024
- Nível
- Superior
- Cargo
- Analista de Tecnologia da Informação
- CCerto
- EErrado
GabaritoE — Errado
Gabarito: ERRADO (alternativa E). A instrução apresentada está incorreta porque a sintaxe do comando DELETE no SQL não utiliza o asterisco (*) após a palavra-chave DELETE — a forma correta é simplesmente DELETE FROM Enfermeiro WHERE ID = 121;. O * é um curinga usado no comando SELECT para indicar "todas as colunas", mas no DELETE ele não tem função e torna a instrução inválida na maioria dos SGBDs relacionais.
O comando DELETE é um dos comandos da DML (Data Manipulation Language), a sublinguagem do SQL responsável por manipular os dados dentro das tabelas. Enquanto o SELECT é usado para consultar (recuperar) dados, o INSERT para inserir novos registros e o UPDATE para modificar registros existentes, o DELETE é o comando utilizado para excluir registros de uma tabela. A sintaxe básica do DELETE é:
DELETE FROM nome_da_tabela
WHERE condição;A cláusula WHERE é opcional, mas extremamente importante: se omitida, todos os registros da tabela serão excluídos. No comando do enunciado, a intenção é excluir apenas o registro do enfermeiro cujo ID é igual a 121, o que é uma operação válida e comum. O problema está exclusivamente no * após o DELETE.
Por que o * é inválido no DELETE? Porque o DELETE opera sobre linhas inteiras (registros), não sobre colunas específicas. Não faz sentido "selecionar colunas" para excluir — ou a linha é removida por completo, ou não é. O * é um curinga que pertence à sintaxe do SELECT, onde SELECT * significa "selecione todas as colunas". No DELETE, a instrução já implica a remoção da linha inteira, então o * é redundante e sintaticamente incorreto.
Vale notar que alguns SGBDs podem ser mais tolerantes e aceitar a sintaxe com * (como o MySQL em certas configurações), mas o padrão SQL/ANSI e a grande maioria dos bancos de dados relacionais (Oracle, PostgreSQL, SQL Server, etc.) rejeitam essa forma. Em provas de concurso, a banca espera que o candidato conheça a sintaxe padrão e identifique o erro.
A pegadinha aqui é clássica: o candidato que está acostumado com SELECT * FROM ... pode transferir automaticamente o * para o DELETE, sem perceber que a sintaxe é diferente. É uma armadilha de "transferência de conhecimento" — saber a sintaxe de um comando não significa que ela se aplica a outro.
Guarde esta distinção: SELECT usa * para todas as colunas; DELETE não usa * porque exclui linhas inteiras. É exatamente nesse ponto que a questão se decide.
A instrução DELETE * FROM Enfermeiro WHERE ID = 121; está errada porque a sintaxe correta do comando DELETE não inclui o asterisco. A forma correta seria:
DELETE FROM Enfermeiro WHERE ID = 121;O * é um curinga exclusivo do comando SELECT, onde SELECT * significa "selecione todas as colunas". No DELETE, a operação já remove a linha inteira, então o * é desnecessário e inválido. A banca explora exatamente essa confusão entre a sintaxe do SELECT e a do DELETE.
A banca troca a sintaxe do SELECT pela do DELETE. O candidato que memorizou SELECT * FROM ... pode aplicar o * automaticamente no DELETE, sem perceber que a sintaxe é diferente. Lembre-se: DELETE não usa * — ele exclui linhas inteiras, então não há necessidade de especificar colunas.
Na prova, ao ver um comando DELETE, verifique sempre se há um * após a palavra-chave. Se houver, a instrução está incorreta. A sintaxe correta é DELETE FROM tabela WHERE condição; — sem asterisco. Essa é uma pegadinha recorrente em questões de SQL.
Gabarito: letra E (ERRADO).
Link permanente: /questoes/qg347818