Postgres cascades truncates to unrelated tables
I think TRUNCATE ... CASCADE doesn't do any reference checking on foreign key values, that would defeat the purpose. The mere presense of referential integrity constraints connecting attributes to users via accounts causes all three (and possibly more) tables to be truncated (which you would have noticed if accounts weren't empty).