Поскольку id после группировки может быть несколько, то нужно использовать аггрегатные функции для их получения. В данном случае -
GROUP_CONCAT().
Ну или, если очень хочется получить каждый id в отдельной строке, можно обернуть ваш запрос в другой:
select * from test_prep_materials where PATH in (
select tpm.PATH
from tests as t
left join test_prep_materials as tpm on tpm.TID = t.ID
group by tpm.PATH
having max(t.YEAR) < 2024 and min(t.YEAR) > 2022
)
P.S. Логичнее, вроде, джойнить тесты к материалам, а не наоборот.