Alternativa B - Não, pois ela ignora os níveis que não estão associados a nenhum curso.
Justificativa Didática
Para resolver essa questão, precisamos entender como funciona a cláusula JOIN em SQL, especificamente o tipo RIGHT JOIN.
1. Entendendo o Objetivo
Pedro deseja listar todos os níveis de ensino, inclusive aqueles que ainda não têm nenhum curso cadastrado. Ou seja, a tabela principal deve ser NIVEL, garantindo que seus registros apareçam mesmo sem correspondência na tabela CURSO.
2. Análise da Consulta SQL
A query apresentada é:
SELECT N.DESCRICAO, C.NOME
FROM NIVEL N
RIGHT JOIN CURSO C
ON N.CODIGONIVEL = C.CODIGONIVEL
- Tabela Esquerda:
NIVEL (alias N) - Tabela Direita:
CURSO (alias C) - Tipo de Junção:
RIGHT JOIN (Junção à Direita)
3. Regra do RIGHT JOIN
Em um RIGHT JOIN, o banco de dados prioriza a tabela que está posicionada à direita da palavra-chave JOIN.
- Ele retorna todos os registros da tabela da direita (
CURSO). - Retorna os registros da tabela da esquerda (
NIVEL) apenas se houver correspondência (caso contrário, preenche com NULL).
4. Por que a consulta falha?
Como a tabela CURSO está à direita, a consulta garante que todos os cursos apareçam. No entanto, se um nível de ensino não tiver nenhum curso associado, ele estará na tabela da esquerda (NIVEL) e será excluído do resultado, pois não há correspondência na tabela da direita.
Isso é o oposto do que Pedro precisa. Para conseguir o objetivo dele, a consulta deveria usar um LEFT JOIN (para proteger a tabela NIVEL) ou um FULL OUTER JOIN.
| Tipo de JOIN | Tabela Protegida (Todos os registros vêm) | O que acontece com dados sem par |
|---|
| INNER JOIN | Nenhuma (só vem quem tem par) | Dados sem par são descartados |
| LEFT JOIN | Tabela da Esquerda | Preenche colunas da direita com NULL |
| RIGHT JOIN | Tabela da Direita | Preenche colunas da esquerda com NULL |
Conclusão
A alternativa B é a correta porque identifica precisamente que o RIGHT JOIN fará com que os níveis sem cursos sejam ignorados, já que a proteção é dada à tabela CURSO.