Union ist schneller, da es einfach die erste SELECT-Anweisung übergibt und dann die zweite SELECT-Anweisung parst und die Ergebnisse am Ende der Ausgabetabelle hinzufügt.
Der Join durchläuft jede Zeile beider Tabellen, findet Übereinstimmungen in der anderen Tabelle und erfordert daher viel mehr Verarbeitung, da für jede einzelne Zeile nach übereinstimmenden Zeilen gesucht werden muss.
BEARBEITEN
Mit Union meine ich Union All, da es für das, was Sie erreichen wollten, angemessen erschien. Obwohl eine normale Union im Allgemeinen schneller ist als Join.
EDIT 2 (Antwort auf den Kommentar von @seebiscuit)
Ich stimme ihm nicht zu. Technisch gesehen ist ein "JOIN" immer noch teurer als eine reine Verkettung, egal wie gut Ihr Join ist. Ich habe in meinem Blog codePERF[dot]net einen Blogbeitrag erstellt, um dies zu beweisen . Praktisch gesehen dienen sie zwei völlig unterschiedlichen Zwecken, und es ist wichtiger, sicherzustellen, dass Ihre Indexierung richtig ist, und das richtige Tool für den Job zu verwenden.
Technisch denke ich, dass es mit den folgenden 2 Ausführungsplänen aus meinem Blog-Beitrag zusammengefasst werden kann:
UNION ALL
Ausführungsplan
JOIN
Ausführungsplan
Praktische Ergebnisse
Praktisch gesehen ist der Unterschied bei einer Clustered-Index-Suche vernachlässigbar: