Why is my biggest segment resulting in an empty table? I'm trying to identify top tables by size in my Oracle DB, I tried with

select  segment_type,
        segment_name,
        sum(bytes/1024/1024) MB

from    user_segments s

where   segment_type like 'TABLE%'

group by segment_type,segment_name
order by 3 desc
;


and my top biggest table is ABC_TABLE. Querying USER_EXTENTS for the table 

select  *
from    user_extents e
where   segment_name = 'ABC_TABLE'
;


I get 218 records, and querying USER_SEGMENTS again for this specific table this is what I get:

 SEGMENT_NAME   | PARTITION_NAME | SEGMENT_TYPE | SEGMENT_SUBTYPE | TABLESPACE_NAME | BYTES      | BLOCKS | EXTENTS | INITIAL_EXTENT | NEXT_EXTENT | MIN_EXTENTS | MAX_EXTENTS | MAX_SIZE   | RETENTION | MINRETENTION | PCT_INCREASE | FREELISTS | FREELIST_GROUPS | BUFFER_POOL | FLASH_CACHE | CELL_FLASH_CACHE 
 ABC_TABLE      |                | TABLE        | ASSM            | ABC             | 2341470208 | 285824 | 218     | 65536          | 1048576     | 1           | 2147483645  | 2147483645 |           |              |              |           |                 | DEFAULT     | DEFAULT     | DEFAULT          


What I don't understand is that by querying ABC_TABLE no records are shown, it seems to be empty. What am I getting wrong?
You might have empty blocks below the high water mark (HWM). Delete statement, by default, doesn't lower the HWM; however, TRUNCATE, CTAS to name few do (down to MINEXTENTS on the table). Thus the empty blocks are considered as used blocks. 

Simple Demo:

SQL&gt; create table t1(col1 varchar2(100));

Table created.

SQL&gt; select bytes from user_segments where segment_name='T1';

     BYTES
----------
     65536

SQL&gt; insert into t1 select 'sample text of line'||level from dual connect by level&lt;=2000;

2000 rows created.

SQL&gt; commit;

Commit complete.

SQL&gt; select bytes from user_segments where segment_name='T1';

     BYTES
----------
    131072

SQL&gt; delete from t1;

2000 rows deleted.

SQL&gt; commit;

Commit complete.

SQL&gt; select bytes from user_segments where segment_name='T1';

     BYTES
----------
    131072


You see, the size of the table is still same though the table is empty.

SQL&gt; truncate table t1;

Table truncated.

SQL&gt; select bytes from user_segments where segment_name='T1';

     BYTES
----------
     65536