Questão de Banco de Dados — Consultas e Comandos em SQL — FUNDATEC 2023
Banco de Dados›Consultas e Comandos em SQL
Código
qa539031
Banca
FUNDATEC
Órgão
Pref Sapucaia do Sul
Ano
2023
Cargo
ASist ( )
Avalie o comando abaixo, escrito em linguagem SQL.
DELETE FROM USUARIO WHERE EMAIL = 'Sem' AND EMAIL IS NULL;
Quais registros da tabela serão excluídos?
AOs registros cujo campo EMAIL seja igual a 'Sem'.
BOs registros cujo campo EMAIL seja nulo.
COs registros cujo campo EMAIL seja igual a 'Sem' ou nulo.
DTodos.
ENenhum.
Revelar gabarito e comentário▾
GabaritoE — Nenhum.
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 e a lógica de três valores do SQL
Gabarito: letra E. O comando DELETE FROM USUARIO WHERE EMAIL = 'Sem' AND EMAIL IS NULL não exclui nenhum registro, porque a condição exige que o campo EMAIL seja, ao mesmo tempo, igual ao texto 'Sem' e nulo — algo logicamente impossível, já que um valor não pode ser simultaneamente um texto específico e a ausência de valor. A resposta correta é a letra E.
O cerne da questão está na semântica do valor NULL no padrão SQL. Diferentemente de outras linguagens, NULL não é um valor, mas a representação da ausência de valor — um campo desconhecido, inexistente ou não informado. Por isso, qualquer comparação envolvendo NULL (como =, <>, >, <) não resulta em TRUE nem em FALSE, mas em um terceiro estado lógico: UNKNOWN (desconhecido). Essa é a chamada lógica de três valores (3VL) do SQL.
No comando da questão, a cláusula WHERE combina duas condições com o operador AND:
EMAIL = 'Sem' — para ser verdadeira, o campo precisa conter exatamente o texto 'Sem'.
EMAIL IS NULL — para ser verdadeira, o campo precisa estar sem valor algum.
A segunda condição usa o predicado IS NULL, que é a única forma correta de testar a ausência de valor (comparações com = NULL nunca funcionam). Porém, as duas condições são mutuamente excludentes: se o campo tem o valor 'Sem', ele não é nulo; se é nulo, não pode ser igual a 'Sem'. O AND exige que ambas sejam verdadeiras, o que nunca ocorre. Portanto, o resultado do WHERE é sempre FALSE (ou UNKNOWN), e nenhuma linha é selecionada para exclusão.
Para ilustrar, imagine uma tabela USUARIO com três registros: um com EMAIL = 'Sem', outro com EMAIL = NULL e um terceiro com EMAIL = '[email protected]'. Aplicando a condição:
Registro 1 (EMAIL = 'Sem'): a primeira condição é TRUE, mas a segunda (IS NULL) é FALSE. TRUE AND FALSE = FALSE → não exclui.
Registro 2 (EMAIL = NULL): a primeira condição (= 'Sem') é UNKNOWN, e a segunda é TRUE. UNKNOWN AND TRUE = UNKNOWN → o filtro só deixa passar TRUE, então não exclui.
Registro 3 (EMAIL = '[email protected]'): a primeira é FALSE, a segunda é FALSE. FALSE AND FALSE = FALSE → não exclui.
Nenhum registro atende à condição completa. A pegadinha clássica da banca é o candidato ler a condição como se fosse um OR (excluir quem tem EMAIL = 'Sem' ou EMAIL nulo), mas o comando usa AND, o que torna a condição impossível de ser satisfeita.
Guarde a distinção que decide esta questão: = compara valores; IS NULL testa ausência de valor; e AND exige que todas as condições sejam verdadeiras simultaneamente. É exatamente nessa combinação que as alternativas se separam.
Alternativa A — ❌ Incorreta
Afirma que seriam excluídos os registros com EMAIL igual a 'Sem'. O erro está em ignorar a segunda condição AND EMAIL IS NULL. Para que um registro fosse excluído, ele precisaria ter EMAIL = 'Sem' e ser nulo ao mesmo tempo — o que é impossível. A condição AND não é um OR; ela restringe, não amplia. Se a intenção fosse excluir apenas os registros com EMAIL = 'Sem', o comando correto seria DELETE FROM USUARIO WHERE EMAIL = 'Sem'.
Alternativa B — ❌ Incorreta
Afirma que seriam excluídos os registros com EMAIL nulo. O erro é o mesmo da alternativa A, mas no sentido oposto: ignora a primeira condição EMAIL = 'Sem'. Um campo nulo nunca é igual a 'Sem', então a condição EMAIL = 'Sem' AND EMAIL IS NULL nunca é verdadeira para um registro nulo. Para excluir apenas os nulos, o comando correto seria DELETE FROM USUARIO WHERE EMAIL IS NULL.
Alternativa C — ❌ Incorreta
Afirma que seriam excluídos os registros com EMAIL igual a 'Sem' ou nulo. Esta é a pegadinha central: a alternativa troca o operador AND por OR. Com OR, bastaria uma das condições ser verdadeira, e os registros com 'Sem' ou nulos seriam excluídos. Mas o comando usa AND, que exige que ambas as condições sejam verdadeiras simultaneamente — algo impossível. A banca explora exatamente a confusão entre os operadores lógicos.
Alternativa D — ❌ Incorreta
Afirma que todos os registros seriam excluídos. Isso só ocorreria se a cláusula WHERE estivesse ausente (excluindo todas as linhas) ou se a condição fosse sempre verdadeira, o que não é o caso. A condição EMAIL = 'Sem' AND EMAIL IS NULL é sempre falsa, então nenhum registro é selecionado. Excluir todos exigiria simplesmente DELETE FROM USUARIO (sem WHERE).
Alternativa E — ✅ Correta ⟵ GABARITO
Afirma que nenhum registro será excluído, e é exatamente o que ocorre. A condição EMAIL = 'Sem' AND EMAIL IS NULL é logicamente impossível: um campo não pode ser, ao mesmo tempo, igual a um texto específico e nulo. O AND exige que ambas as condições sejam verdadeiras, o que nunca acontece. Portanto, o WHERE nunca é satisfeito e o DELETE não remove nenhuma linha.
NÃO CAIA NESSA!
A banca troca o operador lógico AND por OR na alternativa C. Com OR, a condição seria verdadeira para registros com EMAIL = 'Sem' ou nulos — mas o comando usa AND, que exige que ambas as condições sejam verdadeiras ao mesmo tempo, o que é impossível. Fique atento: AND restringe, OR amplia. Com treino, você enxerga essas trocas de longe 💪.
NÃO CAIA NESSA!
Para resolver questões de DELETE com WHERE, identifique primeiro os operadores lógicos (AND/OR) e os predicados de comparação (=, <>, IS NULL). Depois, teste mentalmente cada condição com um exemplo de registro. Se as condições forem mutuamente excludentes (como = 'Sem' e IS NULL), o resultado é sempre vazio. Essa análise lógica evita cair na pegadinha do OR.
Gabarito: letra E — nenhum registro será excluído.