Вы можете изменить свой запрос и установить обратное выражение where следующим образом: вы получите строки, которые не соответствуют «рабочему заголовку», ИЛИ (это важно) строки, которые не соответствуют датам в таблице 2.
$pdo = $service->pdo;
$sql = "SELECT a.id, a.name, a.surname, a.job, b.start_date, b.end_date
FROM table1 a
INNER JOIN table2 b on b.id = a.id
WHERE a.job <> '{$job}'
OR
STR_TO_DATE(b.`start_date`, '%d-%m-%Y') <> '{$date}'
GROUP BY a.id ";
return $pdo->query($sql)->fetchAll(PDO::FETCH_OBJ);
РЕДАКТИРОВАТЬ
После прочтения ваших комментариев я вижу, что вам не нужны косули, которые перенаправили в ваш запрос, вам нужны строки, соответствующие первомуи не соответствуют второму.Так что вам нужно это так:
$pdo = $service->pdo;
$sql = "SELECT a.id, a.name, a.surname, a.job, b.start_date, b.end_date
FROM table1 a
INNER JOIN table2 b on b.id = a.id
WHERE a.job = '{$job}'
AND
STR_TO_DATE(b.`start_date`, '%d-%m-%Y') <> '{$date}'
GROUP BY a.id ";
return $pdo->query($sql)->fetchAll(PDO::FETCH_OBJ);