Na primeria consulta
select a.nome from aluno a where not exists
(select m.id from matricula m where m.aluno_id = a.id);
o resultado foi de apenas um registro: "Paulo da Silva".
Na segunda consulta onde existe um filtro
(where m.data > now() - interval 6 month)
o resultado foi de 3 registros. segunda consulta:
select a.nome from aluno a where not exists
(select m.id from matricula m where m.aluno_id = a.id
and m.data > now() - interval 6 month);
A segunda consulta não deveria retornar menos registros que a primeira? Visto que aquela é mais restritiva.