Olá,
Vi a dúvida do outro colega nessa mesma questão, considerando que estamos no ano de 2018 e supondo que tenhamos registros na nossa tabela de cursos nos anos de 2016 e 2017; e o exercício nos propõe para mostrar os que tiveram matricula no ano de 2015 (mas lembrando, ainda quiséssemos saber quem fez matricula no ano de 2016 e 2017), como seria uma query performática para nos trazer o filtro correto?
A Query proposta no exercicio foi:
select a.nome from aluno a where not exists (
select m.id from matricula m where m.aluno_id = a.id and
m.data > (select sysdate - interval '1' year from dual));
mas ao meu entender, essa query retira um ano e não nos traria o filtro correto, mostrando nesse cenário, os alunos que não tiveram matriculas no ano anterior, ou seja, 2017.
Como o outro colega disse na sua dúvida, busquei também uma outra query para que eu soubesse exatamente em qual ano não houveram matriculas e ela foi a seguinte:
select a.nome from aluno a where not exists (
select m.id from matricula m where m.aluno_id = a.id and extract (year from data) = 2015
);
Mas também como informado na dúvida já postada, essa query não seria performática para o nosso banco, e por isso a minha dúvida, baseando-se nesses fatos, qual seria a melhor forma para retornar o valor independente do ano que busco e do ano em que eu esteja?