Все, что сказал @andreyNikolov, на 100% правильно.Это то, что вы можете легко выяснить самостоятельно, просмотрев Фактический план выполнения (Не Предполагаемый План выполнения).Обратите внимание на следующие примеры данных, таблицу и структуру индекса:
USE tempdb -- safe place in Dev to test this kind of thing...
GO
-- sample data and indexes
IF OBJECT_ID('dbo.ATable','U') IS NOT NULL DROP TABLE dbo.ATable
CREATE TABLE dbo.ATable
(
Set1 INT NOT NULL,
Set2 INT NOT NULL,
AColumn INT NOT NULL,
BColumn INT NOT NULL
);
INSERT dbo.ATable (Set1, Set2, AColumn, BColumn)
VALUES (1,2,3,3),(1,2,4,4),(5,5,6,6),(11,22,40,40),(11,20,40,44),(11,22,14,4),(1,2,3,3);
CREATE NONCLUSTERED INDEX indexA ON dbo.ATable(AColumn) INCLUDE(Set1);
CREATE NONCLUSTERED INDEX indexB ON dbo.ATable(BColumn) INCLUDE(Set2);
Теперь запустите следующее с включенным «Включить фактический план выполнения».
SELECT Set1 --Use Index A
FROM dbo.ATable
WHERE AColumn = 3
UNION ALL
SELECT Set2 --Use Index B
FROM dbo.ATable
WHERE BColumn = 4;
... и план выполнения:

В запросе над UNION ALL выполняется некластеризация искать по ключевому столбцу IndexA (AColumn).Поскольку я включил Set1 в качестве столбца включения в IndexA, IndexA может удовлетворить запрос без поиска Rid или Key.Вот как должны быть разработаны индексы.То же самое относится и к запросу под UNION ALL, за исключением того, что он использует IndexB.
Опять же, это та вещь, которую легко понять самостоятельно, когда у вас есть полное понимание того, как читать планы выполнения.