Ti posto al volo parte di una query che ho usato su un sito di prenotazioni alberghiere. Spero ti possa essere utile come spunto

SELECT * FROM qCamereDisponibilita WHERE (db_fine < dataInizio OR db_fine IS NULL) AND (db_inizio > dataFine OR db_inizio IS NULL)