the inner join is to take the correspondingly registries, that have the same key, in the "where" is where the actual matching is performed, verifing what fields of the table doesn't match. the id must always match, else, how do you know what transaction corresponds to what? in your query you take the registries that don't have pair in the other table, what the op seems do seek is the registries that have pair, but with different values.
I'm brazilian and english (well, human languages in general) aren't my best skill, so, sorry by my english. (if you want we can speak in C# or VB.Net =p)