Based on the documentation, the best approach is to use the create or replace and select * EXCEPT
CREATE OR REPLACE TABLE mydataset.mytable AS (
SELECT * EXCEPT (column_to_delete) FROM mydataset.mytable
);
as with altering and drop the column, this does not free the storage of the column that was deleted immediately
Check this link for more info, it is useful to understand what is happening under the hood of a query Managing-table-schemas-BigQuery