>so why doesn't it throw an error?
it will join on the litteral value 't3.Col1' , meaning the string 't3.Col1', and not on the value of the column col1 of table t3.
the @variable will not be interpreted as table.column expression, but as it is declared, as a string.