Ermutigt durch Christoph schickt ich eine Beschreibung des Problems mit den nicht-deterministischen Funktionen an Craig Freedman (zum Glück privat, sonst wäre meine Mail vermutlich nie angekommen). Er antwortete sehr prompt und schrieb mir, dass er das Problem dem für den Teil zuständigen Entwickler gezeigt habe. Hier die Antwort des Entwicklers, die Craig mir weiterleitete:
In general, SQL Server does not guarantee the timing of execution of scalar operators. For non-deterministic scalars (built-in and user-defined), that means the timing semantics (number of times executed and when) is not defined. In addition, it may change from one plan to another, or from one release to the next.
Er selber fügte noch als persönlichen Kommentar an, dass er die Lösung mittels temporärer Tabelle favorisiere:
Unfortunately, I am not aware of (and was unable to identify) a better workaround than simply storing the GUIDs in a temp table before joining with the original table.
Er schlug auch vor, dass ich das Kundenfeedback unter http://connect.microsoft.com melde, obwohl ich da möglicherweise die gleiche Antwort bekomme. Ich stimme ihm in all diesen Punkten zu. Es lohnt sich sicher das dort einzukippen, weil es dann mal in einem Forum öffentlich diskutiert wird. Mal sehen, ob ich morgen dazu komme…