Код ниже возвращает желаемые результаты. Если он не может соединить значения Name1, Name2 или Name3 строки со значениями Name1, Name2 или Name3 в любой другой строке, тогда значения должны быть уникальными.
declare @tbl table (
ID INT IDENTITY(1,1),
Name1 varchar(100),
Name2 varchar(100),
Name3 varchar(100)
);
insert into @tbl values
('AA', 'AB', 'AC'),
('BA', 'BB', 'AA'),
('CA', 'CB', 'CC'),
('DA', 'DB', 'DD'),
('EA', 'AB', 'EC'),
('CC', 'FB', 'FC');
select T1.*
from @tbl T1
left join @tbl T2 on T2.ID != T1.ID and (
(T1.Name1 in (T2.Name1, T2.Name2, T2.Name3))
or (T1.Name2 in (T2.Name1, T2.Name2, T2.Name3))
or (T1.Name3 in (T2.Name1, T2.Name2, T2.Name3))
)
where T2.ID is null;
=== edit ===
Чтобы игнорировать повторяющиеся значения в любом месте таблицы, даже если они находятся в одной строке, попробуйте эту версию вместо ...
declare @tbl table (
ID INT IDENTITY(1,1),
Name1 varchar(100),
Name2 varchar(100),
Name3 varchar(100)
);
insert into @tbl values
('AA', 'AB', 'AC'),
('BA', 'BB', 'AA'),
('CA', 'CB', 'CC'),
('DA', 'DB', 'DD'),
('EA', 'AB', 'EC'),
('CC', 'FB', 'FC');
;with UniqueValues as (
select Value
from (
select Value=Name1 from @tbl
union all
select Value=Name2 from @tbl
union all
select Value=Name3 from @tbl
) D
group by Value
having count(1)=1
)
select T1.*
from @Tbl T1
join UniqueValues U1 on U1.Value=T1.Name1
join UniqueValues U2 on U2.Value=T1.Name2
join UniqueValues U3 on U3.Value=T1.Name3;