In MySQL, CROSS JOIN is a syntactic equivalent to INNER JOIN (they can replace each other). In standard SQL, they are not equivalent. INNER JOIN is used with an ON clause, CROSS JOIN is used otherwise.
INNER JOIN and , (comma) are semantically equivalent in the absence of a join condition: both produce a Cartesian product between the specified tables (that is, each and every row in the first table is joined to each and every row in the second table).
So, in MySQL
CROSS JOIN == INNER JOIN == , but only in the absence of ON condition in case INNER JOIN is used. Personally, I would never use INNER JOIN when I mean CROSS JOIN. Nor I would ever use a comma, either for CROSS or INNER JOIN.
In my queries, when I put INNER JOIN I really mean INNER JOIN, so ON condition always presents. And when I put CROSS JOIN I really mean CROSS JOIN, so there is no ON condition.
IMHO this query:
[sql]SELECT *FROM t1, t2WHERE t1.id = t2.FK_t1_id[/sql]
which can be written as:
[sql]SELECT *FROM t1CROSS JOIN t2WHERE t1.id = t2.FK_t1_id[/sql]
and which in fact is:
[sql]SELECT *FROM t1INNER JOIN t2 ON t1.id = t2.FK_t1_id[/sql]
So, I think that using the comma "operator" (or "condition-less" INNER JOIN, or CROSS JOIN) together with a related WHERE condition, in order to "implement" an INNER JOIN with ON condition is not right.
That's why I think your query is more readable when it's put like this:
[sql]SELECT walks.id, walks.station, walks.station_address, walks.type, walks.county, walks.description, walks.walk_name, walks.duration, walks.national_park, walks.station_address_type, walks.url_title, walks.country, walks.os_map FROM walksINNER JOIN waypoints ON walks.id = waypoints.walk LEFT JOIN rating ON walks.id = rating.walk_id GROUP BY rating.walk_id[/sql]