Processo (codprocesso, autor, reu, dataultimamovimentacao, assunto, codjuiz) Juiz (codjuiz, nome) Considerando as tabelas anteriores, de um banco de dados relacional, assinale a opção cuja consulta em SQL mostra os nomes dos juízes para os quais não há processos distribuídos (relacionados).
- A)SELECT J.nome FROM Juiz AS J WHERE J.nome NOT IN (SELECT P.codjuiz FROM Processo AS P);
Errada, porque compara J.nome com uma lista de codjuiz, misturando nome com chave estrangeira.
- B)SELECT J.nome FROM Juiz AS J, Processo AS P WHERE J.codjuiz inner join P.codjuiz;
Errada, porque a sintaxe está incoerente e não forma um JOIN válido nem uma condição lógica de exclusão.
- C)SELECT J.nome FROM Juiz AS J WHERE J.codjuiz NOT IN (SELECT P.codjuiz FROM Processo AS P);
Certa, pois compara J.codjuiz com os códigos usados em Processo e retorna os juízes sem processos associados.
- D)SELECT J.nome FROM Juiz AS J WHERE J.codjuiz LIKE (SELECT P.codjuiz FROM Processo AS P);
Errada, porque LIKE é para comparação por padrão textual, não para verificar ausência de relacionamento entre chaves.
- E)SELECT J.nome FROM Juiz AS J, Processo AS P WHERE J.nome NOT EXISTS (P.codjuiz);
Errada, porque NOT EXISTS está mal aplicado e a expressão não segue a sintaxe correta para a subconsulta correlacionada.
Gabarito: C
Para descobrir quais juízes não têm processos vinculados, a lógica é olhar a tabela Juiz e verificar quem não aparece como referência na tabela Processo pela chave codjuiz. Em SQL, isso costuma ser feito com uma subconsulta e o operador NOT IN, ou com uma anti-join equivalente. Aqui, a ideia é simples: se o código do juiz não estiver na lista de códigos de juízes usados em Processo, então esse juiz não possui processos distribuídos. O ponto central é não confundir nome com código. A subconsulta retorna P.codjuiz, então a condição precisa comparar J.codjuiz com essa lista, e não J.nome. Quando você compara o atributo errado, a consulta até pode parecer elegante, mas entrega resultado sem sentido. SQL gosta de precisão, não de improviso. O gabarito C está correto porque faz exatamente isso: seleciona J.nome da tabela Juiz e filtra os juízes cujo J.codjuiz não aparece em (SELECT P.codjuiz FROM Processo AS P). Assim, sobram apenas os juízes sem processos relacionados. É a forma clássica de responder esse tipo de questão em prova. Só um cuidado de prova: em bancos reais, NOT IN pode ter comportamento problemático se a subconsulta trouxer NULL, mas em questões objetivas como esta a leitura esperada é essa comparação direta entre chaves. Em SQL, o raciocínio relacional é mais importante do que o enfeite da sintaxe.