It can, but the problem with implicit joins comes when you refer to things part-way down the implicit join chain. For example:
Code:
select x from X x
where x.Y.name = :yname
and x.Y.Z.name = :zname
This is not the same as this join:
Code:
select x from X x
join x.Y y
join y.Z z
where y.name = :yname and z.name = :zname
The first query, with the implicit joins, is "give me any x that has any y with this name, and that has any y (same or different) that has a z with this other name". Whereas the second query means "give me any x that has a y with this name and a nested z with this other name". That is, in the first query there is no guaranteed relation between the y object with yname and the z object with zname: there is a guaranteed relation between those two objects, when the second query is used.
And I think that most people reading the first query would expect it to do what the second query does. That's where the problems with implicit joins arise.