Risposte:
db_update()non implementa alcuna interfaccia che abbia join()/ innerJoin()/ etc. metodi quindi penso che tu sia bloccato con l'utilizzo db_query()e la scrittura manuale della stringa di query.
$sql = "
UPDATE field_data_field_TEST as ft
left join node as n on ft.entity_id = n.nid
set n.type = :type1
where n.type = :type2";
$args = array(':type1' => 'test', ':type2' => 'foo');
db_query($sql, $args);
db_query(). Se si desidera attenersi rigidamente alla documentazione, sicuramente, una condizione con una sottoquery sarebbe un'opzione. Ma come dici tu, sarebbe meno performante e per me non è affatto "meglio" che usare una query sql diretta
Updatenon implementa alcuna joinfunzione, è comunque necessario utilizzare la query generica per questo caso.