Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dúvida no Ex. 4 da Aula 1 - Alunos sem matrícula e o Exists

Tinha em mente a possibilidade de resolver com LEFT JOIN, mas gostaria de saber se a maneira que cheguei até a resposta também seria adequada. Usei desta forma para evitar o LEFT JOIN, que ainda não havia sido utilizado.

SELECT A.NOME FROM ALUNO A WHERE A.NOME NOT IN (SELECT DISTINCT A.NOME FROM ALUNO A JOIN MATRICULA M ON M.aluno_id = A.id AND M.data BETWEEN GETDATE() - 45 AND GETDATE());

Obs: como as datas já são "antigas", todos os dezesseis alunos serão retornados.

2 respostas
solução!

Oi Bruno, Tudo bem?

Verifiquei a sua solicitação. Usando o SQLServer e o t-SQL não só no SQLServer mas em varios outros bancos, existem diversas maneiras de retornar um resultado. É a mesma coisa que programar, existe vários algoritmos, várias maneiras de chegar a um determinado ponto. Certo?

Agora vamos para segunda parte. Você não achou que ficou meio redundante?

Você fez uma volta toda pra chegar no mesmo lugar de um LEFT JOIN Correto? Você realizou uma subconsulta e dentro dessa subconsulta você realizou um JOIN o que dependendo da quantidade de dados, com certeza você pode atrasar de maneira significativa a consulta.

Beleza?

Abraços.

Concordo Felipe. Utilizar not in é bem menos performático e não faria sentido como o LEFT JOIN. Porém, ao fazer o exercício tentei utilizar apenas os conhecimentos que já haviam sido dados, mesmo já conhecendo o outer join. Obrigado pelos esclarecimentos!