Auditor de Contas Públicas - Auditoria de Tecnologia da Informação
À luz das tabelas T1 e T2, anteriormente apresentadas, analise o comando SQL exibido a seguir.select case when exists (select * from T2 where T2.E = 2 and T2.P = 3 and exists (select * from T1 where T1.P in (2,3,4) and T2.E in (2,3))) then 1 else 0 end flag Sobre uma eventual execução desse script, é correto afirmar que:
Ahaveria um erro de sintaxe na última linha, no termo “flag”;
Bseria produzido um resultado contendo somente a linha de títulos;
Cseria produzido um resultado contendo, além da linha de títulos, uma linha com uma coluna com o valor 0;
Dseria produzido um resultado contendo, além da linha de títulos, uma linha com uma coluna com o valor 1;
Ehaveria um erro de sintaxe na segunda linha, pois não é permitido o uso da cláusula “exists” logo após o termo “when”.
Revelar gabarito e comentário▾
GabaritoD — seria produzido um resultado contendo, além da linha de títulos, uma linha com uma coluna com o valor 1;
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 com EXISTS e CASE WHEN
Gabarito: letra D. O script SQL é sintaticamente correto e, ao ser executado, retorna uma linha com uma coluna de nome "flag" contendo o valor 1. O EXISTS externo é verdadeiro pois existe uma linha em T2 com E=2 e P=3 (a segunda linha), e a subconsulta interna, que referencia T2.E da linha corrente (valor 2), encontra ao menos uma linha em T1 com P em (2,3,4). Portanto, o CASE WHEN retorna 1.
Análise detalhada
O comando:
select case when
exists (select * from T2
where T2.E = 2
and T2.P = 3
and exists
(select * from T1
where T1.P in (2,3,4)
and T2.E in (2,3)))
then 1 else 0 end flag
A subconsulta externa verifica se existe em T2 uma linha que atenda três condições:
T2.E = 2
T2.P = 3
exists (subconsulta interna)
Na tabela T2:
E
Q
P
1
10
2
2
40
3
m
20
8
4
10
NULL
Apenas a segunda linha (E=2, P=3) satisfaz as duas primeiras condições.
Para essa linha, a subconsulta interna é correlacionada: ela usa T2.E (que é 2) e verifica se existe em T1 um registro com P in (2,3,4) e T2.E in (2,3). Como T2.E = 2 está no conjunto (2,3), e T1 tem linhas com P=2,3,4, a condição é verdadeira. Logo, o EXISTS externo é verdadeiro e o CASE retorna 1.
Alternativas
Alternativa A — ❌ Incorreta
Não há erro de sintaxe. O alias "flag" após end é perfeitamente válido em SQL.
Alternativa B — ❌ Incorreta
O resultado inclui uma linha de dados (com o valor 1), não apenas os títulos.
Alternativa C — ❌ Incorreta
O valor retornado é 1, não 0.
Alternativa D — ✅ Correta ⟵ GABARITO
Como demonstrado, o script retorna uma linha com uma coluna "flag" contendo o valor 1.
Alternativa E — ❌ Incorreta
O uso de exists logo após when é permitido. A sintaxe CASE WHEN <condição> THEN ... aceita qualquer expressão booleana, incluindo subconsultas com EXISTS.
PEGA ESSA DICA!
Em subconsultas correlacionadas com EXISTS, a subconsulta interna pode referenciar colunas da consulta externa. O escopo da correlação é o nível imediatamente superior. Nesta questão, T2.E na subconsulta interna refere-se à linha de T2 sendo avaliada na subconsulta externa, não a todas as linhas de T2.