В вашем запросе нет ничего плохого. Если вы стремитесь получить first_rows максимально быстро, то может быть (сравните его) лучше использовать (выберите в select следующим образом). (Например, если это веб-страница, на которой вы хотите, чтобы пользователь показывал записи в таблице нумерации страниц). Но это будет зависеть от количества записей, которые вы получили в таблице 1. Для нескольких строк я бы все равно go использовал подход с левым соединением, который у вас изначально был.
Если бы с другой стороны была обработка, выполняемая для ВСЕХ строк (например, задание ETL , который должен работать со всеми записями в таблице 1), тогда подход с левым соединением является лучшим.
Следует обратить внимание на то, установлены ли у вас fkey-ограничения для root_id, branch_id, leaf_id
SELECT (select name from table2 where id=xx.root_id) as root_name
,(select name from table2 where id=xx.branch_id) as branch_name
,(select name from table2 where id=xx.leaf_id) as leaf_name
FROM Table1 AS XX