Answers

To briefly address your second point, the nullability check-box being grayed out in the Table Designer is By Design, as the engine will automatically determine the nullability of the column based on the expressions used. (Unless of course you specify persisted
and not null)

Back to the root issue, however, I had a hunch when I first read the post that the column was indeed a nullable persisted computed column. There is currently a known bug that our deployment stack does not appropriately account for changes to the
nullability of persisted computed columns thus causing the drop/add on the columns on deployment you are experiencing.

Nevertheless, thank you for adding another report to the issue. Look for the fix in a future release of SSDT!

To briefly address your second point, the nullability check-box being grayed out in the Table Designer is By Design, as the engine will automatically determine the nullability of the column based on the expressions used. (Unless of course you specify persisted
and not null)

Back to the root issue, however, I had a hunch when I first read the post that the column was indeed a nullable persisted computed column. There is currently a known bug that our deployment stack does not appropriately account for changes to the
nullability of persisted computed columns thus causing the drop/add on the columns on deployment you are experiencing.

Nevertheless, thank you for adding another report to the issue. Look for the fix in a future release of SSDT!

I can verify Daves findings. We have a few tables with persisted computed columns basically just adding a few pieces of meta data like computing the length of a VARBINARY(MAX) column for use higher up in the stack. Marking the computed column NOT NULL by
manually changing the signature keeps the table(s) from being modified when comparing schemas. To circumvent the NULL issue for the computed column, use NULLIF() with a default value.

A mental note to self (and others) is remembering to package the latest SqlPackage.exe and related assemblies when deploying to environment where SSDT is not installed (such as when using a custom installer).