Auditor Federal de Finanças e Controle - Tecnologia da Informação
Com relação às tabelas cliente e visita, descritas anteriormente, o comando SQL que deleta corretamente os clientes que nunca visitaram o site é:
Adelete from clientewhere not exists(select * from visita vwhere v.codigo in cliente.codigo)
Bdelete from clientewhere not exists(select * from visita vwhere v.codigo <> cliente.codigo)
Cdelete from clientewhere codigo in (select codigo from visita)
Ddelete from clientewhere codigo <> ALL (select codigo from visita)
Edelete from clientewhere (select count(*) from visita vwhere v.codigo <> cliente.codigo) > 0
Revelar gabarito e comentário▾
GabaritoD — delete from cliente
where codigo <> ALL (select codigo from visita)
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 SQL para deletar clientes que nunca visitaram
Gabarito: letra D. A alternativa D utiliza codigo <> ALL (select codigo from visita), que retorna verdadeiro quando o código do cliente é diferente de todos os códigos presentes na tabela visita – ou seja, quando o cliente não possui nenhuma visita registrada. É a única sintaxe correta para implementar a operação desejada.
A questão testa conhecimento de subconsultas correlacionadas e operadores de conjunto. O operador <> ALL equivale a "não igual a nenhum valor da subconsulta", que é exatamente a condição para clientes que nunca visitaram.
1Subconsulta: visita
2Operador: <> ALL
3Compara: codigo do cliente
4Resultado: só sem visita
LEVEL · soulevel.com.br
Alternativa A — ❌ Incorreta
A subconsulta where v.codigo in cliente.codigo é sintaticamente inválida. O operador IN exige uma lista ou subconsulta; a expressão cliente.codigo (coluna) não constitui uma lista. Mesmo que se interpretasse como v.codigo = cliente.codigo, a lógica estaria correta ("não existe visita com mesmo código"), mas a sintaxe errada invalida a alternativa.
Alternativa B — ❌ Incorreta
A condição v.codigo <> cliente.codigo na subconsulta sempre retornará linhas (pois existem visitas para outros clientes), fazendo com que not exists seja falso para todos os clientes. Dessa forma, nenhuma linha é deletada – nem mesmo os clientes que nunca visitaram.
Alternativa C — ❌ Incorreta
codigo in (select codigo from visita) seleciona clientes que TÊM pelo menos uma visita, ou seja, deleta exatamente os clientes que visitaram. O sentido é oposto ao desejado.
Alternativa D — ✅ Correta ⟵ GABARITO
codigo <> ALL (select codigo from visita) é a forma padrão em SQL para verificar se um valor é diferente de todos os valores de uma subconsulta. Retorna verdadeiro apenas quando o código do cliente não aparece em nenhuma linha da tabela visita, deletando corretamente os clientes que nunca visitaram.
Alternativa E — ❌ Incorreta
A subconsulta (select count(*) from visita v where v.codigo <> cliente.codigo) > 0 conta visitas com código diferente do cliente. Para qualquer cliente (mesmo os que nunca visitaram), haverá visitas com outros códigos, resultando sempre em contagem > 0. Portanto, todos os clientes seriam deletados.
Gabarito: letra D – única alternativa que deleta apenas os clientes sem visitas.