Are both tables equally large, or is one smaller than the other?
It would certainly help to have an index on (personCity, PersonaID) on both tables.
At least if the condition on personCity selects just a smaller group of rows in the tables. If it selects, say, 10 % of the rows, it may not help much.
Also, the condition looks a little funny to me. So if personID 123 is in London i TableA and in Paris in the other we want that row, but not if that person is in Madrid?
If you can expect the query to return several millions of rows, you may also have to break up the operation in chunks to avoid filling up the log file.