As per the documentation provided in the following page, once you query ALL_TAB_COLUMNS, database views and view columns are also included. There’s nowhere specified whether the table is actually a table or a view.
However, with the following SQL it’s easy to exclude views and retrieve table columns only.
select table_name, column_name, data_type, data_length, column_id from all_tab_columns where owner = 'SCHEMA_NAME' and table_name not in (select view_name from all_views where owner = 'SCHEMA_NAME') order by 1, 2, 3;
It saved my day! 🙂