An `UPDATE` without `WHERE` clause will update all the rows of the table. For those rows that don't have a matching `address_id` in table `B`, the subquery returns an empty result set, so the value is updated to `NULL`.

---
There's probably a more elegant way to do it but this should only update the matching rows:

    update TableA A 
    set email = (select email from TableB B where A.address_id = B.address_id)
    where exists
          (select 1 from TableB B where A.address_id = B.address_id) ;

Another option is to use `MERGE`:

    MERGE INTO TableA AS A
    USING
      ( SELECT address_id, email
        FROM TableB
      ) AS B
      ON A.address_id = B.address_id
    WHEN MATCHED THEN
      UPDATE SET email = B.email ;