A comparison of 'StringBuilder and 'Join is difficult here because you are using different methods of "composing" the contents of your Tables[0] (its Rows) into an enumerable form for manipulation: in the second example you are using Linq instead of a for-loop.
So, in some ways you are really asking about comparing using Linq to using a 'for-loop.
There is a detailed discussion of using 'Join vs. 'StringBuilder here: [
^] which you might find useful.
Also see the discussion and timing results here: [
^].
My reading of the above discussions suggests that 'Join and 'StringBuilder are about equally performant, but I believe that for your case you'd have to do some timing.
The special case of 'Join using 'StringBuilder internally appears to be true only under these conditions:
1. .NET 4.0 or later
2. the argument to 'Join is an IEnumerable<string>
However, when the arguments to 'Join is an Array, 'Join uses "FastAllocateString() and UnSafeCharBuffer)" ... see the second link above for the source of this comment.