ลองดูว่าใช่ข้อมูลที่ต้องการหรือเปล่า (ปรับเปลี่ยนเอา variable มาแทนวันที่ละกัน)
SELECT pvl.person_id, pvl.person_vaccine_id, pvl.vaccine_date, pv.vaccine_name, o1.nextdate
FROM `person_vaccine_list` pvl
INNER JOIN person_vaccine pv ON pv.person_vaccine_id = pvl.person_vaccine_id
LEFT JOIN (SELECT * FROM oapp o WHERE o.nextdate BETWEEN "2012-01-01" and "2012-01-31") o1 ON o1.person_vaccine_id = pvl.person_vaccine_id
WHERE vaccine_date BETWEEN "2012-01-01" and "2012-01-31"
AND ISNULL(o1.person_vaccine_id)
ORDER BY pvl.vaccine_date