What You May Not Join
Last reviewed · content updated
AdvancedWhat you'll learn
~18 min- Read data classification as an inherited constraint on what you may build
- Recognize the joins that produce an output more sensitive than either input
- Route a sensitivity question to a decision instead of making it silently in a WHERE clause
What it is: deciding, before a join runs, whether combining two permitted datasets produces something neither of them was cleared for.
What it buys: the sensitivity question gets answered by someone authorized to answer it, at design time, on the record — instead of being settled implicitly by an analyst writing a query, and discovered later by an auditor or a customer.
What to fund: a named person who can rule on aggregation questions within a day, and the expectation that analysts route to them rather than guess.
You are not setting the classification
If you came through the Zero Trust training you met data labels as a security control — something you apply, enforce, and use as a policy input. Set that seat aside. Here, classification is something you inherit and must not violate. Somebody already decided that the customer table is restricted and the circuit topology table is internal. Your job is not to reclassify them. It is to know what those labels permit you to build.
That reframing matters because the failure mode is different from each side. A security engineer’s failure is a label applied incorrectly. Yours is a perfectly correct label on each input, and an output that quietly belongs in a category neither input was in.
Prompt first: find and measure, never rule
An agent is useful for finding these:
Here are the schemas and classifications of the tables I plan to join[paste]. My output grain is [grain], audience is [audience].
Identify where this join could produce an output more sensitive thanits inputs. Specifically check for identity reassembly, small-cellaggregation, and sensitivity inheritance through the join key. Forsmall cells, write me the query that counts how many output groupsfall below thresholds of 5, 10, and 25 entities.
Do not tell me whether this is permitted. That is not yours or mineto decide - produce the facts I need to take to the person who ruleson it.The final instruction is not politeness. An agent asked whether something is allowed will produce an answer, and that answer will be a general-purpose inference about privacy norms with no knowledge of your organization’s actual policy, your regulator, or your contracts. It will sound authoritative. Taking it as a ruling means an unauthorized person made a compliance decision, and the fact that the unauthorized person was software does not improve the situation.
Agent finds and quantifies. Human with authority decides.
You join two internal-classified tables. You select no restricted columns, and every access check passes. Your output aggregates to segments, 40 of which serve fewer than 10 customers. What is the right next step?
Aggregation and the mosaic problem
Two datasets, each cleared for your use, can combine into something that is not.
Meridian’s case: circuit topology is internal — which circuits exist, where they run, how many customers each serves. Outage history is internal — which circuits failed, when, for how long. Both are fine for you to read.
Join them, aggregate to a small enough grain, and you can produce a table showing which specific neighborhoods lose power most often, with durations. At the level of a circuit serving 4,000 customers that is an operational metric. At the level of a circuit segment serving 12 customers, it is close to a statement about identifiable households — and there is a real question about whether it should be published to a dashboard that forty people can open.
Neither input was sensitive. The join and the grain made the output sensitive. Nothing in the platform will stop you, because every access check you passed was a check on the inputs.
- Identity reassembly — separately innocuous attributes that together identify a person or household. Meter-level anything is usually one join away from this.
- Small-cell aggregation — a group-by whose smallest groups contain few enough entities that a row is effectively about a named party. The threshold is a policy decision, not a technical one.
- Sensitivity inheritance — joining anything to a restricted table generally makes the result restricted, even if you selected no restricted columns. The join key itself carried information.
The question you must not answer alone
When you find one of these, the wrong move is to decide it yourself — in either direction. Proceeding because it seems fine is obviously risky. Silently abandoning the analysis is the failure people notice less, and it is expensive: a genuinely valuable metric gets dropped because an analyst was uncertain and had nowhere to take the question.
Route it instead. What the decision-maker needs from you is short and specific:
SENSITIVITY QUESTION - circuit reliability by segment
INPUTS circuit_topology (internal), outage_history (internal)OUTPUT one row per circuit segment per month, with outage count and total durationCONCERN at segment grain, 340 of 5,100 segments serve fewer than 25 customers; 40 serve fewer than 10. A row about a 10-customer segment is arguably a statement about identifiable households.AUDIENCE distribution planning supervisor plus ~40 operations staff with dashboard accessALTERNATIVES (a) suppress segments under 25 customers - loses 6.7% of segments, including some of the worst performers (b) roll up to circuit grain - loses the precision that makes the metric actionable (c) publish at segment grain to a named-access group of 6ASKING FOR a ruling on which of the three, or a fourth I have not seenDECIDE BY 2026-09-08 (build starts after)That is a document somebody can rule on in ten minutes. It names the concern honestly, quantifies it, and offers options with their costs — rather than asking “is this okay?”, which is unanswerable and gets deferred.
Key takeaway
Classification reaches you as an inherited constraint, not a control you are setting, and the failure mode is an output more sensitive than either input: identity reassembly, small-cell aggregation, or sensitivity inherited through a join key. Every access check you passed examined the inputs, so none of them will catch it. When you find one, do not rule on it in either direction — quantify the concern, cost the alternatives, name the audience, and route it to whoever decides. Use an agent to find and measure these, never to say whether they are permitted. Module 3 begins the build, with a profile and a constraint list in hand.
LEADERSHIP DECISION name who rules on aggregation sensitivity, and commit them to a turnaround an analyst can plan aroundPRACTITIONER ACTION check every join for identity reassembly, small cells, and inheritance through the key; route with quantified options rather than asking "is this ok?"SUCCESS MEASURE zero published data products whose sensitivity question was settled inside a WHERE clause; every routed question ruled on within the committed window