NOT IN в большинстве случаев - самая медленная реализация. Лучше использовать, в зависимости от объёма данных и наличия индексов, либо WHERE NOT EXISTS, либо LEFT JOIN WHERE IS NULL.
SELECT *
FROM `table1`
JOIN `table2` ON `title`=`sometitle`
WHERE NOT EXISTS ( SELECT NULL
FROM table3
WHERE table1.id = table3.id )
ORDER BY `date`
SELECT *
FROM `table1`
JOIN `table2` ON `title`=`sometitle`
LEFT JOIN table3 ON table1.id = table3.id
WHERE table3.id IS NULL
ORDER BY `date`
Что именно использовать - надо смотреть по построенному плану запроса и практическому сравнению производительности запросов.