Considere as duas consultas a seguir.
SELECT Col1, Col2
FROM TblA
UNION
SELECT Col1, Col2
FROM TblB
e
SELECT DISTINCT Col1, Col2
FROM TblA
UNION
SELECT DISTINCT Col1, Col2
FROM TblB
Estes são logicamente equivalentes. Minha pergunta é se eles são tratados da mesma forma pelo mecanismo de banco de dados. O SQL Server reconhece a redundância e ignora o DISTINCT
operador?
Não, eles não são necessariamente "tratados da mesma forma pelo mecanismo de banco de dados". Um teste abaixo mostra que você pode obter planos de consulta diferentes.
Em muitos casos, a diferença entre os planos de consulta pode não ser importante para você. Mas em alguns casos (provavelmente raros) isso pode importar significativamente. Por exemplo, se o SQL Server tiver uma estimativa de cardinalidade muito ruim para uma ramificação da UNION, o cálculo das linhas exclusivas nessa ramificação pode resultar em um derramamento que não ocorreria se a consulta calculasse apenas o conjunto final de linhas exclusivas.