i cannot comment below etc211's solution, so i just started another answer post.
Hmm, functional delete doesn't seem to work when the list of columns is empty. I'd expect that not to touch the table at all, and yet it deletes all the rows in it instead.
For above, why don't you create a function that selects the columns that you are willing to delete?
let's assume the table t of yours contain column names:col1,col2,col3,col4
and you want to delete: col5,col6
from q code:
tgt_cols:`col5`col6;
filtered_cols: (cols t) inter tgt_cols;
if[0 < count filtered_cols;
{![`t;();0b;x]} filtered_cols];
Above will first check the existence of the columns that you want to remove; and if the target-columns-to-delete exists, it will remove those columns.