Да, это останавливает выполнение, поэтому обычно предпочтительнее, чем HAVING COUNT(*) > 0
, что часто не происходит.
С EXISTS
если вы посмотрите на план выполнения, вы увидите, что фактическое число строк, выходящих из table1
, не будет больше 1 независимо от количества совпадающих записей.
В некоторых случаях SQL Server может преобразовать дерево для запроса COUNT
в такое же, как и для EXISTS
на этапе упрощения (с полусоединением и без оператора агрегирования в поле зрения) пример это обсуждается в комментариях здесь .
Для более сложных поддеревьев, чем показано в вопросе, вы можете иногда обнаружить, что COUNT
работает лучше, чем EXISTS
. Поскольку для полусоединения требуется извлечь только одну строку из поддерева, это может побудить план с вложенными циклами для этой части дерева - что может не сработать оптимально на практике.