План выполнения показывает, что он действительно выполняется дважды. Но это верно, только если функция не является детерминированной . Чтобы функция была детерминированной, должна быть определена опция WITH SCHEMABINDING
, и все функции, которые она вызывает, также должны быть детерминированными После того, как я определил хеш-функцию как детерминистическую, план изменился. Теперь он выполняется только один раз!
Однако, если вы не хотите беспокоиться об этом, решение momobo работает так же хорошо.