How to know which columns value is different between two rows
This is the solution I propose, If you have more columns to test differences you just have to union another select in the same manner. 
As I previously commented, in the sample date you provide for id =3 both [Address] and [Address Code] have different values, for these situations two rows are given one showing that column [Address] is different and another showing that column [Address Code] is different.

select id, 'Address Code' As [Column Changed] from
(
select distinct id, [Address Code] from Addresses 
) As Differents
group by id
Having count(*) &gt; 1
UNION 
select id, 'Address'  As [Column Changed] from
(
select distinct id, [Address] from Addresses 
) As Differents
group by id
Having count(*) &gt; 1


Output

id  Column Changed
1   Address Code
2   Address Code
3   Address Code
3   Address