Le SQL standard et portable serait EXISTS.. et est sémantiquement le même IN
SELECT *
FROM requests R
WHERE
EXISTS (SELECT *
FROM node n
WHERE r.id = n.nid AND r.langid = n.langid
)
Le IN multi-colonnes n'est pas portable vers SQL Server ou Sybase au moins.
Autres remarques :
- Un JOIN peut nécessiter un DISTINCT et n'est pas le même que IN ou EXISTS.
- La dernière option est INTERSECT qui est moins couramment prise en charge et fonctionne comme IN/EXISTS
- IIRC certaines versions préhistoriques de MySQL (3.x ?) ne prenaient pas en charge la corrélation pour EXISTS