There is a trick to this. Look for the ones that match, using a left join, and then choose the ones that don't match:
select a.*
from tablea a left join
tableb b
on a.target_id = b.target_id and
a.target_date between b.begin_date and b.end_date
where b.target_id is null;
You can express this in several different ways. For instance, not exists may also seem natural:
select a.*
from tablea a
where not exists (select 1
from tableb b
where a.target_id = b.target_id and
a.target_date between b.begin_date and b.end_date
);
Note: I am using between for these comparisons as a convenient shorthand (to match the language you use in the question). Often with dates, explicit use of <, <=, >, or >= is preferred.