SQL – Junção LEFT OUTER JOIN e Ordenação
Gabarito: Errado. O comando SQL apresentado não é capaz de listar apenas o Aluno apoiado pela Monitoria, pois o uso de LEFT OUTER JOIN faz com que todos os alunos da tabela Aluno sejam retornados, mesmo aqueles que não possuem registro correspondente na tabela Monitoria. Para atender ao requisito de "apresentada com pelo menos um registro na tabela Monitoria", seria necessário um INNER JOIN (ou JOIN), que retorna apenas os registros com correspondência nas duas tabelas.
O comando SELECT é a instrução fundamental para consultas em SQL, permitindo recuperar dados de uma ou mais tabelas. A cláusula FROM indica a tabela de origem, e a cláusula JOIN combina linhas de duas tabelas com base em uma condição de igualdade entre colunas. Existem vários tipos de junção, e a escolha entre eles determina quais registros aparecem no resultado.
O LEFT OUTER JOIN (ou simplesmente LEFT JOIN) retorna todos os registros da tabela à esquerda (a primeira tabela mencionada no FROM), mesmo que não haja correspondência na tabela à direita. Quando não há correspondência, as colunas da tabela à direita são preenchidas com NULL. Já o INNER JOIN retorna apenas os registros que possuem correspondência em ambas as tabelas, descartando aqueles sem par.
No contexto da questão, a tabela Aluno é a tabela à esquerda, e a tabela Monitoria é a tabela à direita. O LEFT OUTER JOIN na condição ON a.matricula = m.matricula_aluno_atendido retornará todos os alunos, inclusive aqueles que nunca foram atendidos em uma monitoria. Para esses alunos, o valor de m.numero_de_horas será NULL. Portanto, a consulta não atende ao requisito de "apresentada com pelo menos um registro na tabela Monitoria", pois incluirá alunos sem monitoria.
Para atender ao requisito, seria necessário usar INNER JOIN, que retornaria apenas os alunos que possuem pelo menos um registro na tabela Monitoria. Além disso, a ordenação ORDER BY 2 DESC está correta, pois ordena pela segunda coluna da lista de seleção (numero_de_horas) em ordem decrescente. O alias nr_horas_atendimento é apenas um apelido para a coluna, não afetando a ordenação.
A pegadinha da questão está em confundir o efeito do LEFT OUTER JOIN com o do INNER JOIN. O candidato pode pensar que, por haver uma condição de junção, apenas os registros com correspondência serão retornados, mas o LEFT OUTER JOIN preserva todos os registros da tabela à esquerda. Essa distinção é crucial para interpretar corretamente o resultado de uma consulta.
Item — ❌ Errado
O comando SQL apresentado utiliza LEFT OUTER JOIN, que retorna todos os registros da tabela Aluno, mesmo aqueles sem correspondência na tabela Monitoria. Isso faz com que a consulta inclua alunos que não possuem nenhuma monitoria, contrariando o requisito de "apresentada com pelo menos um registro na tabela Monitoria". Para atender ao requisito, seria necessário usar INNER JOIN, que retorna apenas os registros com correspondência nas duas tabelas.
A ordenação ORDER BY 2 DESC está correta, pois ordena pela segunda coluna da lista de seleção (numero_de_horas) em ordem decrescente. O alias nr_horas_atendimento é apenas um apelido para a coluna, não afetando a ordenação.
Gabarito: Errado