SQL padrão e portátil seria EXISTS.. e é semanticamente o mesmo IN
SELECT *
FROM requests R
WHERE
EXISTS (SELECT *
FROM node n
WHERE r.id = n.nid AND r.langid = n.langid
)
O IN de várias colunas não é portátil para SQL Server ou Sybase, pelo menos.
Outras notas:
- Um JOIN pode exigir um DISTINCT e não é o mesmo que IN ou EXISTS.
- A última opção é INTERSECT, que é menos suportada e funciona como IN/EXISTS
- IIRC algumas versões pré-históricas do MySQL (3.x?) não suportavam a correlação para EXISTS