Questão nº 43
Questão de Tecnologia da Informação · FGV TJ-AP 2024 (nº 43)
Quando referenciadas, considere as tabelas relacionais Competidor e Disputa, cujas estruturas e instâncias são descritas abaixo. Todas as colunas são definidas como strings.
A tabela Disputa contém as disputas realizadas entre competidores que aparecem na tabela Competidor. Em cada disputa há dois competidores, um com camisa azul e outro com camisa verde.
Considerando as tabelas Competidor e Disputa, descritas anteriormente, analise o comando SQL a seguir.
select nome
from Competidor C
where not exists (select *
from Disputa D
where D.azul = C.nome)
or not exists (select *
from Disputa D
where D.verde = C.nome)
A execução do comando acima produziria somente a lista completa dos competidores que:
- Aparticiparam em disputas com camisas das duas cores;
- Bnunca participaram em disputas com camisa verde;
- Cnunca participaram em disputas com camisa azul;
- Dnas disputas em que participaram, usaram sempre camisas da mesma cor; (alternativa correta)
- Enunca participaram em disputas.
Resposta comentada
Gabarito Alternativa D
O operador NOT EXISTS verifica a ausência de registros em uma subconsulta. Se a subconsulta não encontra nenhuma linha para uma determinada condição, NOT EXISTS retorna verdadeiro; caso contrário, retorna falso. A cláusula OR combina condições, resultando em verdadeiro se pelo menos uma das condições conectadas for verdadeira.
- (A) Incorreta: A consulta seleciona competidores que não participaram com camisas das duas cores. Se um competidor participou com ambas as cores, ambas as condições
NOT EXISTSseriam falsas, eFALSE OR FALSEresultaria em falso, não selecionando o competidor. - (B) Incorreta: Esta alternativa descreve apenas uma das condições que tornaria a cláusula
ORverdadeira (not exists (select * from Disputa D where D.verde = C.nome)). A consulta também seleciona competidores que nunca participaram com camisa azul, ou mesmo aqueles que nunca participaram de disputa alguma. - (C) Incorreta: Similar à alternativa B, esta descreve apenas a outra condição que tornaria a cláusula
ORverdadeira (not exists (select * from Disputa D where D.azul = C.nome)). A consulta é mais abrangente. - (D) Correta: A consulta seleciona competidores para os quais é verdade que (nunca jogaram de azul) OU (nunca jogaram de verde). Isso é logicamente equivalente a
NOT (jogou de azul E jogou de verde). Ou seja, seleciona aqueles que não jogaram com as duas cores. Se um competidor participou, ele só jogou com uma cor (azul ou verde). Se ele nunca participou, a condição "nas disputas em que participaram" é vacuamente verdadeira, pois não há disputas onde ele participou para que a cor fosse diferente. Portanto, a consulta lista competidores que, se participaram, o fizeram sempre com a mesma cor, incluindo aqueles que nunca participaram. - (E) Incorreta: Embora a consulta selecione competidores que nunca participaram (pois para eles, ambas as condições
NOT EXISTSseriam verdadeiras, resultando emTRUE OR TRUE), ela também seleciona aqueles que participaram, mas apenas com uma única cor (ex: só de azul, ou só de verde).
Fonte: FGV TJ-AP 2024 Analista Judiciário - TI - Banco de Dados (Caderno Tipo 1). Reproduzida para fins de estudo.
