Consultas SQL aninhadas e a semântica de IN
Gabarito: ERRADO (letra E). A instrução SQL apresentada contém múltiplos erros de sintaxe que a tornam inválida — como SELECT id curso (sem o ponto entre o nome da coluna e o alias) e ELECT MAX(duracao) (faltando o S de SELECT) —, além de um erro lógico: ela busca os psicólogos que concluíram o curso de maior duração, e não o curso com o maior número de inscritos, como afirma o enunciado. Portanto, a afirmação está incorreta.
A questão exige dois níveis de análise: primeiro, verificar se a consulta é sintaticamente válida; segundo, verificar se ela atende ao objetivo declarado. Vamos decompor a instrução para entender cada problema.
Análise da sintaxe da consulta
A consulta apresentada é:
SELECT p.nome
FROM psicologo p
WHERE p.id_psicologo IN (
SELECT i.id_psicologo
FROM inscricao i
JOIN certificado c ON c.id_inscricao = i.id_inscricao
WHERE i.id_curso = (
SELECT id curso
FROM curso
WHERE duracao = (
ELECT MAX(duracao)
FROM curso
)
)
);
Observando atentamente, encontramos dois erros de sintaxe claros:
SELECT id curso — Na subconsulta mais interna, a intenção é selecionar a coluna id_curso da tabela curso. No entanto, a escrita id curso é interpretada como id com o alias curso, o que está incorreto. O correto seria SELECT id_curso ou SELECT curso.id_curso.
ELECT MAX(duracao) — Falta o S inicial, tornando a palavra ELECT inválida. O correto é SELECT MAX(duracao).
Esses erros de sintaxe, por si só, já tornam a instrução inválida e impossível de executar em qualquer SGBD relacional.
Análise lógica da consulta
Mesmo que corrigíssemos os erros de sintaxe, a consulta ainda não atenderia ao objetivo declarado. O enunciado pede os nomes dos psicólogos que concluíram o curso com o maior número de inscritos. No entanto, a consulta busca os psicólogos que concluíram o curso com a maior duração (via MAX(duracao)).
Para encontrar o curso com o maior número de inscritos, seria necessário contar as inscrições por curso e selecionar o curso com a maior contagem. Uma consulta correta poderia ser:
SELECT p.nome
FROM psicologo p
WHERE p.id_psicologo IN (
SELECT i.id_psicologo
FROM inscricao i
JOIN certificado c ON c.id_inscricao = i.id_inscricao
WHERE i.id_curso = (
SELECT id_curso
FROM inscricao
GROUP BY id_curso
ORDER BY COUNT(*) DESC
LIMIT 1
)
);
Nessa versão, a subconsulta mais interna agrupa as inscrições por curso, ordena pela contagem decrescente e limita a 1, retornando o curso com mais inscritos.
Conclusão
A instrução apresentada está incorreta tanto sintaticamente quanto logicamente. Portanto, o item está ERRADO.
Gabarito: letra E — ERRADO.