First query become correlated subquery. So each outer row subquery is evaluated. If a.b is array the subquery results can be array by doing [0] you are only selecting first element.
a.b is array of n elements join query produces n documents i.e. a joins with each b . You can also have WHERE clause with predicate between a and b.