Given three set up inputs, and a separate table worth of values, the following code will work.
declare @input1 int =1
declare @input2 int =2
declare @input3 int =3
CREATE TABLE #tab1 (var1 INT, var2 INT , var3 INT)
INSERT INTO #tab1
VALUES (1,2,3),(0,0,0),(0,4,0),(1,4,1),(4,0,0),(0,5,1),(2,4,0),(1,4,3)
declare @set table(input int)
insert @set values (@input1), (@input2),(@input3);
select distinct #tab1.*, case when join1.i1 is null then 'No Match' else 'match' end matching
from #tab1
left join (select distinct a.input i1, b.input i2 ,c.input i3
from @set a
cross join @set b
cross join @set c ) join1
on join1.i1=#tab1.var1
or join1.i2=#tab1.var2
or join1.i3=#tab1.var3
I think this is what you were looking for if you didn't want to use 'in'. To be honest, I would use 'in'. It is much simplier and easier to write. The above code took some time to make work. However, I would update your 'in' code as follows:
select * ,'match'
from #tab1
where @input1 in (var1, var2, var3)
or @input2 in (var1, var2, var3)
or @input3 in (var1, var2, var3)
union
select * ,'no-match'
from #tab1
where @input1 not in (var1, var2, var3)
and @input2 not in (var1, var2, var3)
and @input3 not in (var1, var2, var3)