4^{\mathrm{a}} ). Considere as tabelas a seguir, em um banco de dados relacional, contendo informações sobre discentes (alunos), cursos e vínculos entre elas:
Curso (IdCurso, NomeCurso)
Discente (IdDiscente, NomeDiscente, IdCurso)
Pretende-se consultar os nomes dos cursos (NomeCurso) que não possuem discentes matriculados. Para obter este resultado, qual a consulta correta em SQL?

Passo 1

O enunciado nos dá duas tabelas:
Curso IdCurso, NomeCurso e
Discente IdDiscente, NomeDiscente, IdCurso.
Queremos listar todos os cursos cujo IdCurso não aparece em nenhuma linha da tabela Discente (ou seja, sem alunos matriculados).

Passo 2

Uma abordagem é usar uma subconsulta que retorna todos os IdCurso presentes em Discente e, na tabela Curso, filtrar aqueles cujo IdCurso não esteja nesse conjunto. Para isso, utilizamos o operador NOT IN.

Passo 3

A consulta SQL fica assim:
SELECT NomeCurso
FROM Curso
WHERE IdCurso NOT IN (
 SELECT IdCurso
 FROM Discente
);

Resposta

SELECT NomeCurso
FROM Curso
WHERE IdCurso NOT IN (
 SELECT IdCurso
 FROM Discente
);

Exercícios relacionados