New boolean column in big table OR - bad idea ? - new related 0-1 table

From a theoretical point of view, booleans are a bit suspicious (not necessarily wrong though). The idea is that we store true propositions, the absence of something is considered false. So, it's definitely nothing wrong with your suggestion from a theoretical viewpoint. Without knowing what your attribute represents it's difficult to be more specific than that.

From a practical point of view, since most of the rows are false, you will save some space by not storing false for almost all rows.

The downside is that you will have to do an outer join, which may affect performance.

EDIT: As pointed out by @eckes in his comment, deletes in A will have to investigate ABitAttribute for presence of the id beeing deleted. The same goes for updates (if the id column being updated). For inserts, there should be no affect


Are there any major drawback or theory violation in using this kind of technique ?

You should try not to change the logical database design because of storage cost, or operational costs of modifying tables. This is not always possible, but you should try.

So the default choice here should be to add the column. You might want to store this large table as a Clustered Columnstore, which provide column-wise storage, and excellent compression of low-cardinality columns.