Ich verstehe noch nicht so ganz wie du aus best.kunde erstellst bzw daraus die best2 machst?
Der Grund warum wir best2 brauchen ist die Aggregationsfunktion MAX() um datum herum. Würden wir diese schon bei der 1. Query nutzen, so würde nur das aktuellste Datum von allen Produkten zu einem User ausgegeben werden (also nur ein Datum, da das höchste von ALLEN Produkten ausgewählt wird), aber wir wollen ja das aktuellste Datum zu allen Produkten aller User (also höchstes Datum von Artikel 10000, höchstes Datum Artikel 30000...).
Deshalb starten wir eine Unteranfrage die sich nur auf den aktuellen Kunden und nur auf die aktuelle ArtikelNr bezieht.
Dort suchen wir das höchste Datum und fügen es in die WHERE-Klausel der 1. Query ein, dort steht ja best.datum = (SELECT ...).
Aus diesem Grunde müssen wir auch die Tabellen mit Bezeichnern instanziieren da du sonst ambivalente Spaltenbezeichnungen hast.
Lässt du die Bezeichner weg und nutzt nur kunde = kunde würden alle Tupel aus der Unterquery abgefragt werden (da das immer true ist) statt dem aktuellen Kunden.