Whenever you want to have a built-in id for every row, it is provided by OID which is contained in the system column, It is very helpful for the tables we do not have a primary key etc. For instance, if we have a table with two identical rows and want to delete the oldest of the two, we can do that by using an oid column.
We can implement OIDs using 4-byte unsigned integers. They are not unique–the OID counter will wrap around at 2³²-1. OID are also used to identify data types (see /usr/include/postgresql/server/catalog/pg_type_d.h).
If I tell you my experiences, the feature is mostly unused in most postgres-backed applications. In PostgreSQL 8.1 default_with_oids is off by default; in prior versions of PostgreSQL, it was on by default.
OIDs used in user tables are considered deprecated, so maximum installations should leave this variable disabled. Applications that require OIDs for a particular table must specify WITH OIDS when creating the table. We can enable these variables for compatibility with old applications that have a different approach.
If you want to get more insights into SQL, checkout this SQL Course from Intellipaat.