What's the benefit of CROSS JOIN vs INNER JOIN in recursive CTE queries?
Independent of the CTE context, comma-separated items in the FROM list are equivalent to the same with CROSS JOIN replacing the commas. And [INNER] JOIN is exactly the same as CROSS JOIN with a WHERE clause. The manual:


  FROM T1 CROSS JOIN T2 is equivalent to FROM T1 INNER JOIN T2 ON TRUE (see below). It is also equivalent to FROM T1, T2.


But there is a subtle difference between comma and explicit JOIN syntax. Comma separates more strictly. See:


What does [FROM x, y] mean in Postgres?