You might assume null is null and that is the end of it.
That assumption will burn you in Snowflake.
When you are working with semi-structured data, there is a real difference between a key that is missing and a key that exists with a JSON null value. Those are not the same thing, and treating them like they are can quietly wreck your logic, especially once casting starts flattening the distinction.
One kind of null means “nothing there.” The other means “there, but null.”
That difference matters more than teams think.
If a JSON key is explicitly set to null, Snowflake can still recognize that as a JSON null value. If the key does not exist at all, that shows up more like a SQL null. Those may look similar in the result at a glance, but they do not mean the same thing.
One tells you the payload carried the field and assigned it a null value. The other tells you the field was never there in the first place.
That is not trivia. That is meaning.
Casting is where teams accidentally erase the truth
This is the real trap.
Once you cast extracted values too early, you can collapse the distinction between missing and explicitly null. At that point, the original meaning is gone, and now your downstream logic is working with a simplified version of reality that may not be good enough.
That is how subtle data bugs happen.
Not from some dramatic platform failure. From a team being a little too casual about what a null actually meant before it got cast away.
Semi-structured data punishes lazy assumptions
This is the broader lesson.
A lot of teams move into JSON and VARIANT with relational habits that are too blunt for the job. They assume the values will behave cleanly, the absence of a field means the same thing everywhere, and null handling is close enough.
It is not.
If the difference between “missing” and “explicitly null” affects business logic, quality checks, or downstream reporting, then you need to inspect that state before casting and standardizing it away. Snowflake gives you ways to do that. The mistake is waiting until after the distinction is already gone.
If your null logic is sloppy, your data logic is sloppy
That is the real takeaway.
This is not just a weird Snowflake gotcha. It is a reminder that semi-structured data requires more precision than many teams bring to it. Missing keys, JSON nulls, SQL nulls, and casts all carry implications. If your team treats them as interchangeable, you are not simplifying the model. You are making it less honest.
And once that happens, bad assumptions spread fast.