Well the context of the query is what makes the difference.
In the following query, the second select statement is actually selecting a column from the first table.
SELECT [column1]
FROM [test].[dbo].[table1]
WHERE [column1] IN
(SELECT TOP 5 [test].[dbo].[table1].[column1]
FROM [table1])
If you give the table an alias you will notice different results:
SELECT [column1]
FROM [test].[dbo].[table1] table1A
WHERE [column1] IN
(SELECT TOP 5 [test].[dbo].[table1].[column1]
FROM [table1])
Also when you run the query SELECT TOP 5 [test].[dbo].[table1].[column1] FROM [table1]
on its own, there is no confusion about which table you are selecting from.
Your query is equivalent to:
Select column1 from table1
where column1 in
(select column1)
As long as the other table returns rows, the value you are selecting is always going to be equal to itself in the subquery. Its pretty much like saying Give me everyting in the set where a column value equals itself when added to another set. As long as the other set is not empty, the column value will always equal itself.