According to Google docs, you should use LOOKUP_KEY
to fetch a contact, since its ID in the ContactsContract.Contacts table can change:
An opaque value that contains hints on how to find the contact if its row id changed as a result of a sync or aggregation. (source)
Is it also possible that a RawContacts's ID in the ContactsContract.RawContacts change as well?