How do others know what is delivery address and invoice address if they are in the same table?
An address is an address. There’s no need to store the same address details twice because it’s used for a delivery address and also invoicing.
In your orders table you would have columns like delivery_address_id and invoice_address_id, they could have the same value in them.
If you wanted to list all addresses that were used as a delivery address you can do a simple semi-join
Select * 
from address 
where address_id in (select delivery_address_id from orders)