Tenho dúvida no exercício utilizando In com subquery. Pensei em resolver da seguinte forma:
Select c.nome, a.nome, avg(n.nota) - (select avg(n.nota) from nota n) as diferenca from nota n join resposta r on r.id = n.resposta_id join exercicio e on e.id = r.exercicio_id join secao s on s.id = e.secao_id join curso c on c.id = s.curso_id join aluno a on a.id = r.aluno_id join matricula m on m.aluno_id = a.id where m.data > (select sysdate - interval '6' month from dual) group by c.nome, a.nome;
No entanto, a solução do exercício é essa:
Select c.nome, a.nome, avg(n.nota) - (select avg(n.nota) from nota n) as diferenca from nota n join resposta r on r.id = n.resposta_id join exercicio e on e.id = r.exercicio_id join secao s on s.id = e.secao_id join curso c on c.id = s.curso_id join aluno a on a.id = r.aluno_id where a.id in (select aluno_id from matricula where data > (select sysdate - interval '6' month from dual)) group by c.nome, a.nome;
As duas formas produziriam o mesmo resultado pelo que testei. Não utilizar uma subquery seria uma vantagem, não?