If a sub query is Query[ATuple], a outer join with it can't generate correct SQL statement.
For example, following code
join(students0, DB.departments.leftOuter)((s, d) => select((s, d)) on (d.map(_.id) === s._1)),
the s._1 will be replaced with a constant.