I would like a collection of Phone because that's what I expected and what the navigation to e.phones tells me. But in reality it returns a cartesian product of Employee and Phone which means that I have to care myself.

I asked Mike Keith and here's his answer:

The spec defines identification variables such that they represent instances, not collections.When you alias a JOIN the alias represents each instance of the collection, so in your example "p" represents each phone in the collection (for each row in the cartesian product).There is a section in Chapter 4 in the spec on "Identification Variables" that explains this if you like going to the spec for reference.