Tach!
es entsteht kein kartesisches Produkt. So wie ich den Begriff verstehe, steht er für alle möglichen Paarungen aus 2 Tabellen (oder n-Tupel aus N Tabellen).
Es ist eine Kombination aus kartesischem Produkt und Selektion. Aus dem k.P. werden diejenigen Datensätze selektiert, die zur ON-Klausel passen, also bei denen die Stadtnamen übereinstimmen.
In dem Fall musst du die Daten der zweiten Tabelle soweit einschränken, wie du sie haben möchtest, bevor das Join wirkt.
Wie gesagt: ON Klausel. Die Einschränkung ist da. Weitere Einschränkungen kann man natürlich machen, entweder im ON, um den JOIN selbst zu beschränken, oder nachher im WHERE, um das JOIN-Ergebnis zu beschränken.
Das geht nur in dem Fall nicht, so wie ich ihn verstanden habe. Das WHERE selektiert anhand der Daten innerhalb einer Ergebniszeile. Gesucht ist aber der "letzte Einträge zu den Städten". Dazu müssen die Zeilen untereinander verglichen werden. Das geht aber nur indirekt über eine Gruppierung mit Aggregatfunktion.
Ob man einen JOIN oder Subselect verwendet,
Das war eigentlich gar nicht mein Thema. Aber ja, wenn aus der zweiten Tabelle lediglich ein einzelnes Feld interessiert, dann könnte man auch Tabelle 1 allein und ungejoint befragen und ein Correlated Subselect in der SELECT-Klausel für das Feld aus Tabelle 2 hinzufügen. Da ich aber den Eindruck hatte, dass mehr als ein Feld interessiert, hab ich an diese Variante gar nicht gedacht.
Mein Vorschlag war diesmal, die Ergebnismenge der Tabelle 2 auf den jeweils letzten Datensatz zu beschränken, und diese Zwischenmenge mit der ersten Tabelle zu joinen. Also das Subselect der Tabelle 2 im Join.
dedlfix.