В каких случаях стоит использоваться join(), а в каких конкатенацию?
Есть прекрасный способ для решения всех споров по JS.
Идем на jsperf.com и прогоняем тесты для разных способов и смотрим время :)
Мне кажется что join. 
Если бы я писал join - я бы проходился по всему массиву, брал длину строк, один раз выделял бы память для новой строки, а затем соединял. В случае с конкатенацией операция выделения памяти срабатывает для каждой строки снова и снова