func (this *SA) Method() means that only a pointer to type SA (*SA) has the Method() method, therefore var i IA = &SA{} fulfils the IA interface.
If you change it to read func (this SA) Method() then var i IA = SA{} fulfils the interface, and not var i IA = &SA{}.
*SA is not the same type as SA.
Go provides some shortcuts for dealing with dereferencing method values (which is probably where the confusion is coming from)
If you have a look at the Method Values section of the spec you will see that:
a reference to a non-interface method with a value receiver using a pointer will automatically dereference that pointer
and
a reference to a non-interface method with a pointer receiver using an addressable value will automatically take the address of that value
This is why obj.Method() works whether obj is an *SA or an SA.
Hope that helps.
*SA) to a memory address. That's why&SA{}works, because you give it a memory-address.