Давайте перепишем это с правильным JOIN и добавим NOT к условию для исключения:
SELECT a.field_1, a.field_2, b.field_3, b.field_4
FROM tbl_a AS a JOIN tbl_b AS b ON (a.field_1 = b.field_3)
WHERE NOT (a.field_1 IN (1,2,3,4) AND a.field_date < NOW())
Поскольку NOT (X и Y) эквивалентно (NOT X) ИЛИ (NOT Y), вы можете переписать это как:
SELECT a.field_1, a.field_2, b.field_3, b.field_4
FROM tbl_a AS a JOIN tbl_b AS b ON (a.field_1 = b.field_3)
WHERE a.field_1 NOT IN (1,2,3,4) OR a.field_date >= NOW())
Но нам также нужно знать, может ли любое из field_1 или field_date быть NULL. Если это так, выражение "foo NOT IN (blah)" возвращает NULL, если foo IS NULL. Так что вам нужно быть более конкретным об этом.