Объединения, как правило, более эффективны, поскольку базы данных пишутся с учетом операций над множествами (а объединения - это операции над множествами).
Однако производительность будет варьироваться в зависимости от базы данных, от того, как структурированы таблицы, сколько данных в них и сколько будет возвращено запросом.
Если объем данных невелик, я бы использовал подзапрос, подобный вашему, а не объединение.
Вот как будет выглядеть соединение:
SELECT body
FROM node_revisions nr
INNER JOIN node n
ON nr.vid = n.vid
WHERE n.nid = 4
Я бы не стал использовать отправленный вами запрос, поскольку существует вероятность более чем одной записи узла с nid = 4
, что может привести к его отказу.
Я бы использовал:
SELECT body
FROM node_revisions
WHERE vid IN (SELECT vid
FROM node
WHERE nid = 4);
Это более читабельно или понятно? В данном случае это вопрос личных предпочтений.