Můžete použít toto (kompaktnější syntaxe):
SELECT *
FROM CompletedTasks
WHERE (userID, taskID) NOT IN
( SELECT userID, taskID
FROM PlannedTasks
) ;
nebo NOT EXISTS
verze (která je sice složitější, ale měla by být efektivnější se správnými indexy):
SELECT c.*
FROM CompletedTasks AS c
WHERE NOT EXISTS
( SELECT 1
FROM PlannedTasks AS p
WHERE p.userID = c.userID
AND p.taskID = c.taskID
) ;
a samozřejmě LEFT JOIN / IS NULL
verzi, kterou má @jmacinnes ve své odpovědi.