Il semble que vous deviez utiliser une expression de correspondance FULLTEXT dans votre condition de jointure.
Je n'ai jamais utilisé de correspondance de texte intégral dans une condition de jointure, donc je ne suis pas sûr que cela fonctionnera, mais hypothétiquement, cela pourrait le faire :
SELECT DISTINCT c.*
FROM corpuses c JOIN searches s
ON (MATCH(c.title, c.body) AGAINST (s.term));
Ok, je l'ai essayé en utilisant vos définitions de table et quelques exemples de données du manuel MySQL. Voici une requête qui fonctionne (testée avec MySQL 5.1.30) :
SELECT *
FROM corpuses
WHERE MATCH(title, body)
AGAINST ( (SELECT GROUP_CONCAT(term SEPARATOR ' ') FROM searches)
IN BOOLEAN MODE);