Utilizando essa query
select * from aluno a
join matricula m on m.aluno_id = a.id
where not exists( select m.id from matricula
where m.aluno_id = a.id and
( m.data between GETDATE() -45 and GETDATE() ) );
Encontrei o mesmo resultado dessa:
select * from aluno a
join matricula m on m.aluno_id = a.id
where ( m.data < ( GETDATE() - 45 ) ) ;
Seria realmente necessário o Left Join ou eu errei em algum lugar?