<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>SQL Authority with Pinal Dave</title>
	<atom:link href="https://blog.sqlauthority.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.sqlauthority.com/</link>
	<description>SQL Server Performance Tuning Expert</description>
	<lastBuildDate>Mon, 13 Jul 2026 12:42:47 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://blog.sqlauthority.com/wp-content/uploads/2016/04/pinalsmall.jpg</url>
	<title>SQL Authority with Pinal Dave</title>
	<link>https://blog.sqlauthority.com/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">107185061</site>	<item>
		<title>Data Quality and Observability: A Field Guide in Six Parts</title>
		<link>https://blog.sqlauthority.com/2026/07/20/data-quality-and-observability-a-field-guide-in-six-parts/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=data-quality-and-observability-a-field-guide-in-six-parts</link>
					<comments>https://blog.sqlauthority.com/2026/07/20/data-quality-and-observability-a-field-guide-in-six-parts/#respond</comments>
		
		<dc:creator><![CDATA[Pinal Dave]]></dc:creator>
		<pubDate>Mon, 20 Jul 2026 01:30:48 +0000</pubDate>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[Data Observability]]></category>
		<guid isPermaLink="false">https://blog.sqlauthority.com/?p=203047</guid>

					<description><![CDATA[<p>Master data quality and observability in six parts: name the problem, rank the risk, define rules, place controls, monitor for drift, and respond calmly.</p>
<p>First appeared on <a href="https://blog.sqlauthority.com/2026/07/20/data-quality-and-observability-a-field-guide-in-six-parts/" data-wpel-link="internal" rel="noopener noreferrer">Data Quality and Observability: A Field Guide in Six Parts</a></p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;">Every data team eventually hits the same wall. A number on a dashboard gets questioned, nobody can prove who is right, and trust quietly leaks out of the whole system. Good data quality and observability is what keeps that from happening, and over six posts I worked through how to build it, one hard part at a time.</p>
<p><img  title="Data Quality and Observability: A Field Guide in Six Parts dqo-comic-master-800x533 " fetchpriority="high" decoding="async" class="aligncenter size-large wp-image-203051" src="https://blog.sqlauthority.com/wp-content/uploads/2026/07/dqo-comic-master-800x533.jpg"  alt="Data Quality and Observability: A Field Guide in Six Parts dqo-comic-master-800x533 "  width="800" height="533" srcset="https://blog.sqlauthority.com/wp-content/uploads/2026/07/dqo-comic-master-800x533.jpg 800w, https://blog.sqlauthority.com/wp-content/uploads/2026/07/dqo-comic-master-500x333.jpg 500w, https://blog.sqlauthority.com/wp-content/uploads/2026/07/dqo-comic-master-600x400.jpg 600w, https://blog.sqlauthority.com/wp-content/uploads/2026/07/dqo-comic-master.jpg 1536w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<p style="text-align: justify;">Read on its own, each post solves one problem. Read in order, they follow the path a data team walks as it matures: understand the problem, assess the risk, define the fix, build the controls, monitor for what slips through, and respond calmly when something breaks anyway.</p>
<p style="text-align: justify;">Here is the whole set, with the single idea behind each one and the one thing to do about it.</p>
<h2 style="text-align: justify;">1. Start by naming the problem</h2>
<figure style="text-align: justify;"><img  title="Data Quality and Observability: A Field Guide in Six Parts dqo-comic-three-trust-problems " decoding="async" src="https://blog.sqlauthority.com/wp-content/uploads/2026/07/dqo-comic-three-trust-problems.jpg"  alt="Data Quality and Observability: A Field Guide in Six Parts dqo-comic-three-trust-problems "  /></figure>
<p style="text-align: justify;">&#8220;The dashboard is wrong&#8221; is not a diagnosis. It is a feeling, and it hides three different problems: a value that is wrong (quality), a value that is correct but late (reliability), and a change upstream that no rule was watching for (observability). Each one has a different owner and a different fix.</p>
<p style="text-align: justify;">So when a number is disputed, ask three questions before you open a query. Is a value wrong or missing? That is quality. Are the values fine but late? That is reliability. Did something change that no rule saw? That is observability. The label is the fastest way to stop three teams from investigating the same ghost.</p>
<p style="text-align: justify;"><strong>The takeaway:</strong><span> </span>name the problem before you touch it, and the fix is already half done.</p>
<p style="text-align: justify;"><strong>Read the full post:</strong><span> </span><a href="https://blog.sqlauthority.com/2026/07/10/data-quality-data-reliability-and-data-observability-telling-the-three-apart/" data-wpel-link="internal" rel="noopener noreferrer">Data Quality, Data Reliability, and Data Observability: Telling the Three Apart</a></p>
<h2 style="text-align: justify;">2. Rank issues by risk, not by row count</h2>
<figure style="text-align: justify;"><img  title="Data Quality and Observability: A Field Guide in Six Parts dqo-comic-count-is-not-risk " decoding="async" src="https://blog.sqlauthority.com/wp-content/uploads/2026/07/dqo-comic-count-is-not-risk.jpg"  alt="Data Quality and Observability: A Field Guide in Six Parts dqo-comic-count-is-not-risk "  /></figure>
<p style="text-align: justify;">Profile a messy table and the errors with the biggest counts grab all the attention. They are almost never the ones that matter. Forty duplicate invoices feeding the revenue number will hurt you far more than twelve thousand harmless trailing spaces.</p>
<p style="text-align: justify;">The fix is two columns, not a new tool. Next to every finding, write who feels it downstream and how often it happens, then sort by those instead of by count. Impact times likelihood is the whole model, and it quietly floats your real priorities to the top while the loud, harmless piles sink.</p>
<p style="text-align: justify;"><strong>The takeaway:</strong><span> </span>the most dangerous issue is rarely the one with the biggest number.</p>
<p style="text-align: justify;"><strong>Read the full post:</strong><span> </span><a href="https://blog.sqlauthority.com/2026/07/13/count-is-not-risk-ranking-data-issues-by-what-they-actually-cost/" data-wpel-link="internal" rel="noopener noreferrer">Count Is Not Risk: Ranking Data Issues by What They Actually Cost</a></p>
<h2 style="text-align: justify;">3. Turn &#8220;clean&#8221; into a rule you can test</h2>
<figure style="text-align: justify;"><img  title="Data Quality and Observability: A Field Guide in Six Parts dqo-comic-wish-vs-requirement " decoding="async" src="https://blog.sqlauthority.com/wp-content/uploads/2026/07/dqo-comic-wish-vs-requirement.jpg"  alt="Data Quality and Observability: A Field Guide in Six Parts dqo-comic-wish-vs-requirement "  /></figure>
<p style="text-align: justify;">&#8220;Just make the data clean&#8221; cannot be tested, so it can never be met. A usable requirement has three parts: a rule a check can answer yes or no, a threshold that says how much deviation is acceptable, and a named owner accountable for the definition. That is the difference between a wish and a data contract.</p>
<p style="text-align: justify;">Say each expectation out loud and hold it against three questions. Can I write it as a check that returns a number? Have I decided what number passes? Can I name the person who owns it? Three yeses and you have a requirement. A shrug on any of them and you have a preference.</p>
<p style="text-align: justify;"><strong>The takeaway:</strong><span> </span>if it cannot fail a test, it is not a requirement.</p>
<p style="text-align: justify;"><strong>Read the full post:</strong><span> </span><a href="https://blog.sqlauthority.com/2026/07/14/clean-data-is-not-a-requirement-writing-rules-people-can-act-on/" data-wpel-link="internal" rel="noopener noreferrer">&#8220;Clean Data&#8221; Is Not a Requirement: Writing Rules People Can Act On</a></p>
<h2 style="text-align: justify;">4. Put controls where they can actually stop the flow</h2>
<figure style="text-align: justify;"><img  title="Data Quality and Observability: A Field Guide in Six Parts dqo-comic-where-checks-live " decoding="async" src="https://blog.sqlauthority.com/wp-content/uploads/2026/07/dqo-comic-where-checks-live.jpg"  alt="Data Quality and Observability: A Field Guide in Six Parts dqo-comic-where-checks-live "  /></figure>
<p style="text-align: justify;">You can have the right check and still catch the problem too late. A validation that runs after publication is a smoke detector wired to go off the morning after the fire.</p>
<p style="text-align: justify;">There are only three places a control can live, and each catches something different. Ingestion stops bad rows at the front door. Transformation catches the errors your own joins and calculations create. The release gate is the last block before anyone downstream reads the data. Put the control at the earliest point that can still stop the problem, decide whether it blocks or only warns, and quarantine what fails so the good data keeps moving.</p>
<p style="text-align: justify;"><strong>The takeaway:</strong><span> </span>a check that cannot stop the flow is just a log line.</p>
<p style="text-align: justify;"><strong>Read the full post:</strong><span> </span><a href="https://blog.sqlauthority.com/2026/07/15/where-should-a-data-quality-check-live-gates-controls-and-quarantine/" data-wpel-link="internal" rel="noopener noreferrer">Where Should a Data Quality Check Live? Gates, Controls, and Quarantine</a></p>
<h2 style="text-align: justify;">5. Watch the signals your tests will never catch</h2>
<figure style="text-align: justify;"><img  title="Data Quality and Observability: A Field Guide in Six Parts dqo-comic-four-signals " decoding="async" src="https://blog.sqlauthority.com/wp-content/uploads/2026/07/dqo-comic-four-signals.jpg"  alt="Data Quality and Observability: A Field Guide in Six Parts dqo-comic-four-signals "  /></figure>
<p style="text-align: justify;">Row-level rules only catch the failures you already imagined. They cannot see a feed that arrived stale, a row count that collapsed, a column that changed type, or a value mix that quietly shifted. Those four signals, freshness, volume, schema, and distribution, are where the surprises live.</p>
<p style="text-align: justify;">You cannot spot abnormal without first defining normal. For your most important table, write down four things: when it should arrive, how many rows is normal, what its schema should be, and the usual mix of values in the column you care about. That is a baseline, and a baseline is most of monitoring. Then alert on the size of the change, not the fact of it, so a two percent wobble stays quiet and a sixty percent drop wakes someone.</p>
<p style="text-align: justify;"><strong>The takeaway:</strong><span> </span>rules protect you from the mistakes you imagined, monitoring protects you from the ones you did not.</p>
<p style="text-align: justify;"><strong>Read the full post:</strong><span> </span><a href="https://blog.sqlauthority.com/2026/07/16/it-passed-every-test-and-still-broke-four-signals-validation-never-catches/" data-wpel-link="internal" rel="noopener noreferrer">It Passed Every Test and Still Broke: Four Signals Validation Never Catches</a></p>
<h2 style="text-align: justify;">6. Respond to a data incident without panic</h2>
<figure style="text-align: justify;"><img  title="Data Quality and Observability: A Field Guide in Six Parts dqo-comic-incident-playbook " decoding="async" src="https://blog.sqlauthority.com/wp-content/uploads/2026/07/dqo-comic-incident-playbook.jpg"  alt="Data Quality and Observability: A Field Guide in Six Parts dqo-comic-incident-playbook "  /></figure>
<p style="text-align: justify;">A wrong number in a live meeting makes everyone want to start changing things immediately. That instinct is how a one-hour fix becomes a three-day cleanup.</p>
<p style="text-align: justify;">Triage first, because you cannot size a response until you know the blast radius. Contain before you fix, because cleaning while the tap runs is endless. Trace to the source instead of patching the number, or it comes back next week. Verify the fix, tell the people who trusted the bad value, and close with a short blameless review so the same break does not return.</p>
<p style="text-align: justify;"><strong>The takeaway:</strong><span> </span>changing the data is the middle of an incident, not the end.</p>
<p style="text-align: justify;"><strong>Read the full post:</strong><span> </span><a href="https://blog.sqlauthority.com/2026/07/17/you-just-found-bad-data-in-production-now-what/" data-wpel-link="internal" rel="noopener noreferrer">You Just Found Bad Data in Production. Now What?</a></p>
<h2 style="text-align: justify;">How the six fit together</h2>
<p style="text-align: justify;">Read as a set, they build on each other, because you cannot rank a problem you have not named, define a fix for one you have not ranked, or control one you have not defined. Understanding comes first, response comes last, and monitoring is the quiet layer that keeps the whole thing honest between incidents.</p>
<p style="text-align: justify;">Here is the entire guide in one line each, if you ever need to find the right idea fast.</p>
<table>
<thead>
<tr>
<th>When you hit this</th>
<th>Do this</th>
</tr>
</thead>
<tbody>
<tr>
<td>The dashboard is &#8220;wrong&#8221;</td>
<td>Name it: quality, reliability, or observability</td>
</tr>
<tr>
<td>A long list of data errors</td>
<td>Rank by impact and likelihood, not by count</td>
</tr>
<tr>
<td>&#8220;Just make it clean&#8221;</td>
<td>Write a rule, a threshold, and a named owner</td>
</tr>
<tr>
<td>A check that fires too late</td>
<td>Put controls at ingestion, transformation, and the gate</td>
</tr>
<tr>
<td>Every test passed, it still broke</td>
<td>Monitor freshness, volume, schema, and distribution</td>
</tr>
<tr>
<td>A wrong number in production</td>
<td>Triage, contain, trace, verify, tell, review</td>
</tr>
</tbody>
</table>
<p style="text-align: justify;">Start at the top, or jump to whichever problem is on fire today. Each post also carries a link to its companion Pluralsight course if you would rather see the idea built hands-on.</p>
<h2 style="text-align: justify;">In short</h2>
<p style="text-align: justify;">Data quality and observability is not one skill but six connected moves. Name the problem before you chase it, because &#8220;the dashboard is wrong&#8221; hides three different failures: a wrong value, a late value, and a silent change. Rank issues by impact and likelihood, not by row count. Turn vague requests like &#8220;make it clean&#8221; into a rule, a threshold, and an owner. Place controls where they can stop bad data, not merely log it. Monitor the signals row-level tests miss: freshness, volume, schema, and distribution. And when something breaks anyway, respond calmly rather than fast. Read the six posts in order and you have a working playbook for trustworthy data, from the first disputed number to the last blameless review.</p>
<p style="text-align: justify;">Reference:<span> </span><strong><a href="https://blog.sqlauthority.com/" data-wpel-link="internal" rel="noopener noreferrer">Pinal Dave</a><span> </span>(<a href="https://blog.sqlauthority.com/" data-wpel-link="internal" rel="noopener noreferrer">https://blog.sqlauthority.com/</a>),<span> </span><a href="https://twitter.com/pinaldave" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">X</a></strong></p>
<p>First appeared on <a href="https://blog.sqlauthority.com/2026/07/20/data-quality-and-observability-a-field-guide-in-six-parts/" data-wpel-link="internal" rel="noopener noreferrer">Data Quality and Observability: A Field Guide in Six Parts</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.sqlauthority.com/2026/07/20/data-quality-and-observability-a-field-guide-in-six-parts/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">203047</post-id>	</item>
		<item>
		<title>You Just Found Bad Data in Production. Now What?</title>
		<link>https://blog.sqlauthority.com/2026/07/17/you-just-found-bad-data-in-production-now-what/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=you-just-found-bad-data-in-production-now-what</link>
					<comments>https://blog.sqlauthority.com/2026/07/17/you-just-found-bad-data-in-production-now-what/#respond</comments>
		
		<dc:creator><![CDATA[Pinal Dave]]></dc:creator>
		<pubDate>Fri, 17 Jul 2026 01:30:51 +0000</pubDate>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[Data Observability]]></category>
		<guid isPermaLink="false">https://blog.sqlauthority.com/?p=203034</guid>

					<description><![CDATA[<p>Found bad data in production? Use this data incident response playbook: triage, contain, trace the source, fix, verify, tell people, and review calmly.</p>
<p>First appeared on <a href="https://blog.sqlauthority.com/2026/07/17/you-just-found-bad-data-in-production-now-what/" data-wpel-link="internal" rel="noopener noreferrer">You Just Found Bad Data in Production. Now What?</a></p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;">Most teams have a plan for when a server falls over. Alarms fire, a runbook opens, everyone knows their role. Almost nobody has a plan for when the server is perfectly healthy and the data is simply wrong. And that is the situation that gets pointed at in a leadership meeting, live, while the room slowly turns to look at you. That moment is what data incident response is for, and most teams improvise it.</p>
<figure style="text-align: justify;"><img  title="You Just Found Bad Data in Production. Now What? dqo-hero-incident-playbook " decoding="async" src="https://blog.sqlauthority.com/wp-content/uploads/2026/07/dqo-hero-incident-playbook.jpg"  alt="You Just Found Bad Data in Production. Now What? dqo-hero-incident-playbook "  /></figure>
<p style="text-align: justify;">I have been the person the room turned to look at. The instinct is to start changing things immediately, to be seen doing something. Resist it. Panicked changes are how a small data problem becomes a big one, and how a one-hour fix becomes a three-day cleanup.</p>
<p style="text-align: justify;">Slow down for the first few minutes so you can move fast for the rest. Here is the playbook I wish someone had handed me.</p>
<figure style="text-align: justify;"><img  title="You Just Found Bad Data in Production. Now What? dqo-diagram-incident-playbook " decoding="async" src="https://blog.sqlauthority.com/wp-content/uploads/2026/07/dqo-diagram-incident-playbook.png"  alt="You Just Found Bad Data in Production. Now What? dqo-diagram-incident-playbook "  /><figcaption>Six steps. Slow at the start, fast for the rest.</figcaption></figure>
<h2 style="text-align: justify;">The data incident response playbook, step by step</h2>
<p style="text-align: justify;">Six steps, in order. The first two are the ones people skip, and skipping them is what turns the one-hour fix into the three-day cleanup.</p>
<h3 style="text-align: justify;">Step one: triage before you touch anything</h3>
<p style="text-align: justify;">Before you change a single value, answer three questions. What exactly is wrong? How far has it spread? Who is already acting on it?</p>
<p style="text-align: justify;">That last one gets skipped and later regretted. A wrong number already sitting in a report someone sent to a customer is a very different incident than a number only your team has seen. You cannot size the response until you know the blast radius.</p>
<p style="text-align: justify;">Resist the urge to fix. Diagnose.</p>
<h3 style="text-align: justify;">Step two: contain the spread</h3>
<p style="text-align: justify;">Now that you know roughly what broke, your job is still not to fix it. It is to stop it getting worse. If a bad feed is pumping duplicate rows into a table every few minutes, pausing that feed matters more than cleaning the rows already there. Clean up while the tap is still running and you will be cleaning forever.</p>
<p style="text-align: justify;">Containment buys the one thing you actually need: time to fix the real thing properly instead of frantically.</p>
<h3 style="text-align: justify;">Step three: find the source, do not just patch the symptom</h3>
<p style="text-align: justify;">Here the temptation peaks. You can see the wrong number. You could just update it. Set the value to what it should be, and the meeting is happy.</p>
<p style="text-align: justify;">Then it comes back next week, because you treated the symptom.</p>
<p style="text-align: justify;">The value you can see is the end of a chain, not the start. Walk it backward. The dashboard read a published table, which was built by a transformation, which read a source feed. Follow the lineage upstream until you find the actual break. This is where good lineage and metadata earn their keep, turning a whole-pipeline mystery into a single suspect stage. Fix it there and it stays fixed.</p>
<h3 style="text-align: justify;">Step four: fix, and then verify the fix</h3>
<p style="text-align: justify;">The fix is not done when you make the change. It is done when you have proven the change worked and broke nothing else. Two different things, and people declare victory after the first one constantly.</p>
<p style="text-align: justify;">Re-run the check that caught the problem. Confirm the number is right, not merely different. Then glance at the neighbors, because the classic incident-inside-an-incident is the well-meaning fix that quietly breaks the table next door.</p>
<p style="text-align: justify;">Verification is boring. Verification is the job. A fix you have not verified is a hopeful edit.</p>
<h3 style="text-align: justify;">Step five: tell the people who trusted the bad number</h3>
<p style="text-align: justify;">Somebody made a decision, sent a report, or built a forecast on that value. They need to hear it from you, in plain language, before they hear it from someone else. Say what was wrong, what is right now, and whether they need to do anything.</p>
<p style="text-align: justify;">It is an uncomfortable message, and it is the difference between a team people trust and a team people quietly stop believing. Nobody expects perfection. Everybody remembers who told them straight.</p>
<h3 style="text-align: justify;">Step six: the short, blameless review</h3>
<p style="text-align: justify;">Once the fire is out, spend fifteen minutes on the question that stops the next one. What broke, why did it break, and what single control would have caught it earlier?</p>
<p style="text-align: justify;">Keep it blameless. The moment it becomes a hunt for who to blame, people stop telling you what really happened, and you lose the only information that prevents a repeat. And keep it short. A wandering two-hour meeting produces nothing. Fifteen focused minutes and one follow-up action beats it every time.</p>
<p style="text-align: justify;">Write it on one page. What happened, the timeline, the cause, the fix, and the one thing you are changing so it does not happen again. A one-page record beats a heroic memory, because heroic memories leave the company and take the knowledge with them.</p>
<h2 style="text-align: justify;">The real measure of a data team</h2>
<p style="text-align: justify;">I used to think a good data team was one that never had incidents. I do not believe that anymore. Data breaks. Sources change, feeds fail, someone fat-fingers a value.</p>
<p style="text-align: justify;">The teams I trust are not the ones who never have a bad day. They are the ones who can take a wrong number in a live meeting and close it out calmly, quickly, without drama, then quietly make sure that exact break never happens again.</p>
<p style="text-align: justify;">Changing the data is the middle of an incident, not the end. The end is when the fix is verified, the right people know, and you have learned enough to prevent the next one. Get there calmly and you become the person everyone is glad they turned to look at.</p>
<blockquote><p>If you want the full walkthrough, including recovery verification and the post-incident review, I cover the whole response process in my Pluralsight course,<span> </span><a href="https://www.pluralsight.com/courses/data-quality-respond-incidents" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">Respond to Data Quality Incidents</a>.</p></blockquote>
<p style="text-align: justify;">Reference:<span> </span><strong><a href="https://blog.sqlauthority.com/" data-wpel-link="internal" rel="noopener noreferrer">Pinal Dave</a><span> </span>(<a href="https://blog.sqlauthority.com/" data-wpel-link="internal" rel="noopener noreferrer">https://blog.sqlauthority.com/</a>),<span> </span><a href="https://twitter.com/pinaldave" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">X</a></strong></p>
<p>First appeared on <a href="https://blog.sqlauthority.com/2026/07/17/you-just-found-bad-data-in-production-now-what/" data-wpel-link="internal" rel="noopener noreferrer">You Just Found Bad Data in Production. Now What?</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.sqlauthority.com/2026/07/17/you-just-found-bad-data-in-production-now-what/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">203034</post-id>	</item>
		<item>
		<title>It Passed Every Test and Still Broke: Four Signals Validation Never Catches</title>
		<link>https://blog.sqlauthority.com/2026/07/16/it-passed-every-test-and-still-broke-four-signals-validation-never-catches/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=it-passed-every-test-and-still-broke-four-signals-validation-never-catches</link>
					<comments>https://blog.sqlauthority.com/2026/07/16/it-passed-every-test-and-still-broke-four-signals-validation-never-catches/#respond</comments>
		
		<dc:creator><![CDATA[Pinal Dave]]></dc:creator>
		<pubDate>Thu, 16 Jul 2026 01:30:23 +0000</pubDate>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[Data Observability]]></category>
		<guid isPermaLink="false">https://blog.sqlauthority.com/?p=203038</guid>

					<description><![CDATA[<p>Every test passed and the dashboard still broke. Data pipeline monitoring catches what row rules miss: freshness, volume, schema drift, distribution shift.</p>
<p>First appeared on <a href="https://blog.sqlauthority.com/2026/07/16/it-passed-every-test-and-still-broke-four-signals-validation-never-catches/" data-wpel-link="internal" rel="noopener noreferrer">It Passed Every Test and Still Broke: Four Signals Validation Never Catches</a></p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;">Every check is green. Every validation rule passed. The pipeline reports success in cheerful little checkmarks. And the dashboard is still, somehow, wrong. That gap is exactly what data pipeline monitoring exists to close, and most teams do not have it.</p>
<figure style="text-align: justify;"><img  title="It Passed Every Test and Still Broke: Four Signals Validation Never Catches dqo-hero-four-signals " decoding="async" src="https://blog.sqlauthority.com/wp-content/uploads/2026/07/dqo-hero-four-signals.jpg"  alt="It Passed Every Test and Still Broke: Four Signals Validation Never Catches dqo-hero-four-signals "  /></figure>
<p style="text-align: justify;">This confused me for an entire afternoon once. Every rule I had written was passing, because every rule asked about the contents of a row, and every row was fine. What none of them could tell me was that yesterday&#8217;s file had never arrived. The table was full of perfectly valid data that was exactly one day stale.</p>
<p style="text-align: justify;">My checks were guarding the rooms while someone walked off with the building.</p>
<figure style="text-align: justify;"><img  title="It Passed Every Test and Still Broke: Four Signals Validation Never Catches dqo-diagram-four-signals " decoding="async" src="https://blog.sqlauthority.com/wp-content/uploads/2026/07/dqo-diagram-four-signals.png"  alt="It Passed Every Test and Still Broke: Four Signals Validation Never Catches dqo-diagram-four-signals "  /><figcaption>Four ways a feed goes wrong while every single value stays valid.</figcaption></figure>
<h2 style="text-align: justify;">Validation asks &#8220;is this row ok.&#8221; Observability asks &#8220;did the feed change.&#8221;</h2>
<p style="text-align: justify;">Validation takes a record and checks it against a rule you wrote in advance. Is the region present? Is the amount positive? Is the id unique? Good questions, and they catch plenty. But notice what they share. You had to know to ask them. Validation only catches the failures you already imagined.</p>
<p style="text-align: justify;">Observability watches the behavior of the whole feed over time and asks something different. Is this feed acting the way it usually does? That question catches the failures nobody thought to write a rule for, and those are the ones that hurt.</p>
<h2 style="text-align: justify;">The four signals that watch behavior, not rows</h2>
<p style="text-align: justify;">None of these can be caught by staring at a single row.</p>
<h3 style="text-align: justify;">Signal one: freshness</h3>
<p style="text-align: justify;">Did the data arrive on time, or is a valid-looking table quietly stale? This is the one that got me. Every value can be correct and the table can still be wrong, because it is yesterday&#8217;s correct. Freshness watches the clock, not the contents.</p>
<pre><code>-- Freshness as a check. How stale is the newest row?
SELECT MAX(loaded_at) AS last_load,
       DATEDIFF(hour, MAX(loaded_at), GETDATE()) AS hours_stale
FROM sales_orders;</code></pre>
<p style="text-align: justify;">Not one value is inspected there. The query only asks when the table last moved. Alert when<span> </span><code>hours_stale</code><span> </span>crosses the window you expect, and you have caught the failure that ate my afternoon. A row-level rule never would, because the rows sitting there look great.</p>
<h3 style="text-align: justify;">Signal two: volume</h3>
<p style="text-align: justify;">Feeds have a rhythm. A daily load that usually brings in fifty thousand rows and today brings five hundred is screaming that something upstream broke, probably a partial load. A load that suddenly brings five million is screaming just as loudly in the other direction, maybe a duplicated source or a runaway join. Every individual row can be flawless. The count is the tell.</p>
<h3 style="text-align: justify;">Signal three: schema drift</h3>
<p style="text-align: justify;">Upstream systems change without asking your permission. A column that held a whole number starts holding a decimal. A field named<span> </span><code>total</code><span> </span>becomes<span> </span><code>total_amount</code>. A column vanishes entirely, and your pipeline, being agreeable, fills it with nulls and carries on. Schema drift catches that on the day it happens, instead of three weeks later when someone asks why a chart went flat.</p>
<h3 style="text-align: justify;">Signal four: distribution shift</h3>
<p style="text-align: justify;">The subtle one, and my favorite, because it is so sneaky. Every value is still legal, but the mix has moved. Yesterday, ninety percent of your orders were in the &#8220;completed&#8221; status. Today, sixty percent are. No rule was broken. Both values are perfectly valid. But the shape of reality shifted, and it usually means something real happened upstream, like a status field that stopped updating.</p>
<h2 style="text-align: justify;">You cannot spot abnormal without defining normal</h2>
<p style="text-align: justify;">All four signals need the same thing. To know that today is weird, you have to know what a normal day looks like. That is a baseline: the usual arrival time, the usual row count, the usual schema, the usual mix of values.</p>
<p style="text-align: justify;">The good news is that normal is mostly just history. Your feed has been telling you what it usually does for months. You only have to start listening and write it down.</p>
<h2 style="text-align: justify;">A quick word on not drowning in alerts</h2>
<p style="text-align: justify;">Set up monitoring for the first time and the temptation is to alert on everything. Within a week half the alerts are noise and all of them are muted.</p>
<p style="text-align: justify;">Alert on the size of the change, not the fact of it. A row count that drops two percent is Tuesday. A row count that drops sixty percent is an incident. Tune the thresholds so an alert means &#8220;come look now,&#8221; not &#8220;a number moved slightly, as numbers do.&#8221;</p>
<h2 style="text-align: justify;">Start your data pipeline monitoring this week</h2>
<p style="text-align: justify;">Pick your most important table and answer four questions you have probably never written down. When should it arrive? How many rows is normal? What is its schema supposed to be? What is the usual mix of values in the column you care about most?</p>
<p style="text-align: justify;">Write the answers somewhere. You just built a baseline, which is most of observability.</p>
<p style="text-align: justify;">Rules protect you from the mistakes you imagined. Monitoring protects you from the ones you did not. And the feeds that take down a dashboard are almost always in that second group, sitting there green and confident and quietly wrong.</p>
<blockquote><p>If you want to see these monitors built with real data, I walk through freshness, volume, schema, and distribution in my Pluralsight course,<span> </span><a href="https://www.pluralsight.com/courses/data-observability-monitor-health" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">Monitor Data Health with Data Observability</a>.</p></blockquote>
<p style="text-align: justify;">Reference:<span> </span><strong><a href="https://blog.sqlauthority.com/" data-wpel-link="internal" rel="noopener noreferrer">Pinal Dave</a><span> </span>(<a href="https://blog.sqlauthority.com/" data-wpel-link="internal" rel="noopener noreferrer">https://blog.sqlauthority.com/</a>),<span> </span><a href="https://twitter.com/pinaldave" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">X</a></strong></p>
<p>First appeared on <a href="https://blog.sqlauthority.com/2026/07/16/it-passed-every-test-and-still-broke-four-signals-validation-never-catches/" data-wpel-link="internal" rel="noopener noreferrer">It Passed Every Test and Still Broke: Four Signals Validation Never Catches</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.sqlauthority.com/2026/07/16/it-passed-every-test-and-still-broke-four-signals-validation-never-catches/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">203038</post-id>	</item>
		<item>
		<title>Where Should a Data Quality Check Live? Gates, Controls, and Quarantine</title>
		<link>https://blog.sqlauthority.com/2026/07/15/where-should-a-data-quality-check-live-gates-controls-and-quarantine/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=where-should-a-data-quality-check-live-gates-controls-and-quarantine</link>
					<comments>https://blog.sqlauthority.com/2026/07/15/where-should-a-data-quality-check-live-gates-controls-and-quarantine/#respond</comments>
		
		<dc:creator><![CDATA[Pinal Dave]]></dc:creator>
		<pubDate>Wed, 15 Jul 2026 01:30:53 +0000</pubDate>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[Data Observability]]></category>
		<guid isPermaLink="false">https://blog.sqlauthority.com/?p=203032</guid>

					<description><![CDATA[<p>A check in the wrong place catches bad data too late. See where data quality checks belong: ingestion, transformation, release gates, and quarantine. </p>
<p>First appeared on <a href="https://blog.sqlauthority.com/2026/07/15/where-should-a-data-quality-check-live-gates-controls-and-quarantine/" data-wpel-link="internal" rel="noopener noreferrer">Where Should a Data Quality Check Live? Gates, Controls, and Quarantine</a></p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;">A team I worked with was proud of their data quality checks, and they had earned it. Dozens of validations, all thoughtful, all catching real problems. Then a bad batch sailed straight into the published table, got read by three dashboards, and set off the usual fire drill.</p>
<figure style="text-align: justify;"><img  title="Where Should a Data Quality Check Live? Gates, Controls, and Quarantine dqo-hero-where-checks-live " decoding="async" src="https://blog.sqlauthority.com/wp-content/uploads/2026/07/dqo-hero-where-checks-live.jpg"  alt="Where Should a Data Quality Check Live? Gates, Controls, and Quarantine dqo-hero-where-checks-live "  /></figure>
<p style="text-align: justify;">The checks were not wrong. Every one of them fired. They fired at the very end of the pipeline, after the data was already published, which is a bit like wiring your smoke detector to go off the morning after the fire. Technically accurate. Not much help.</p>
<p style="text-align: justify;">A check is only as useful as two things: where it runs, and whether it can stop anything. A brilliant check in the wrong place is just a very polite log line.</p>
<figure style="text-align: justify;"><img  title="Where Should a Data Quality Check Live? Gates, Controls, and Quarantine dqo-diagram-where-checks-live " decoding="async" src="https://blog.sqlauthority.com/wp-content/uploads/2026/07/dqo-diagram-where-checks-live.png"  alt="Where Should a Data Quality Check Live? Gates, Controls, and Quarantine dqo-diagram-where-checks-live "  /><figcaption>Put the control at the earliest point that can still stop the flow.</figcaption></figure>
<h2 style="text-align: justify;">Detection is not control</h2>
<p style="text-align: justify;">A check that writes &#8220;this looks wrong&#8221; to a log is detection. A check that can stop the bad data moving forward is a control.</p>
<p style="text-align: justify;">Detection is a witness. It saw the crime and wrote it down. Control is the locked door that stopped the crime. You want witnesses. You build the pipeline on locked doors. That proud team had a wall of excellent witnesses and not one locked door, so everything they detected still got through.</p>
<h2 style="text-align: justify;">Three places data quality checks can live</h2>
<p style="text-align: justify;">Three natural checkpoints, each good at catching something different.</p>
<h3 style="text-align: justify;">At ingestion, the front door</h3>
<p style="text-align: justify;">Raw data arrives from a source. Checks here are about basic fitness. Is the file the right shape? Are the required fields present? Are the ids the right format? A problem caught here is the cheapest possible outcome, because the bad data has not touched anything yet. Reject it or quarantine it before it gets comfortable.</p>
<h3 style="text-align: justify;">In transformation, the workshop</h3>
<p style="text-align: justify;">Here you reshape, join, and calculate. Some errors can only appear here, because they are born here. A join that fans out and doubles your rows. A revenue calculation that mishandles a currency. A category mapping that silently drops the values it does not recognize. Transformation checks catch the problems your own logic creates, and every pipeline creates a few.</p>
<h3 style="text-align: justify;">At the release gate, the last door before the public</h3>
<p style="text-align: justify;">The final block before anyone downstream reads the data. Your last chance to say &#8220;no, this batch is not going out.&#8221;</p>
<p style="text-align: justify;">This is exactly what the proud team was missing. They had checks everywhere except the one place that could have stopped publication.</p>
<h2 style="text-align: justify;">Block or warn</h2>
<p style="text-align: justify;">For each control, decide how loudly it speaks. Some failures should stop the pipeline cold. A duplicate in the field that feeds revenue. A load that is half its expected size. A required column gone missing. Publishing that is worse than publishing nothing, so the gate blocks.</p>
<p style="text-align: justify;">Others should only raise a flag. A slightly higher rate of missing optional values deserves a warning, not a full stop. Make every check a hard block and you will be woken at 3 am by something cosmetic. By the third time you will start ignoring the alerts entirely, which defeats the whole point. Save the hard stop for failures that are genuinely worse than a delay.</p>
<h2 style="text-align: justify;">Quarantine, or where bad rows go to think about what they did</h2>
<p style="text-align: justify;">When a check catches bad rows you have a choice. Throw out the whole batch, or set aside just the bad rows and let the good ones flow. The second option is quarantine, and it is usually the kinder one. Good data keeps moving, bad data waits in a holding area, and nothing is silently lost.</p>
<pre><code>-- Good rows go on. Bad rows wait in quarantine.
INSERT INTO orders_clean
SELECT * FROM orders_staging WHERE region_code IS NOT NULL;

INSERT INTO orders_quarantine
SELECT * FROM orders_staging WHERE region_code IS NULL;</code></pre>
<p style="text-align: justify;">Quarantine comes with a rule everyone forgets. Somebody has to actually look at it. A quarantine table nobody reviews is not a safety mechanism. It is a junk drawer, and six months later it holds forty thousand rows and a faint smell. Schedule the failed-record review. Someone owns opening that drawer and deciding what gets fixed, released, or thrown out for good.</p>
<h2 style="text-align: justify;">The placement question, in one line</h2>
<p style="text-align: justify;">Where does a new check belong? Ask what is the earliest point where this problem can exist, and whether a check there can actually stop it. Put the control at the earliest place that can both see the problem and block it. Earlier is cheaper. Blocking is what turns a check into a control.</p>
<h2 style="text-align: justify;">Try this on your pipeline</h2>
<p style="text-align: justify;">Pick your most important check and answer two questions honestly. Where in the pipeline does it run? And if it fails right now, does anything actually stop, or does the data keep flowing while an alert quietly logs itself somewhere nobody reads?</p>
<p style="text-align: justify;">If the honest answer is &#8220;it logs and moves on,&#8221; you have a witness where you needed a locked door. Moving a check earlier and giving it the power to stop the flow is usually a small change. It just happens to pay for itself the first time it catches a bad batch at the front door instead of the front page.</p>
<blockquote><p>If you want to see a full control plan with validation, gates, and quarantine, I build the whole pipeline in my Pluralsight course,<span> </span><a href="https://www.pluralsight.com/courses/data-quality-design-implement-controls" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">Design and Implement Data Quality Controls</a>.</p></blockquote>
<p style="text-align: justify;">Reference:<span> </span><strong><a href="https://blog.sqlauthority.com/" data-wpel-link="internal" rel="noopener noreferrer">Pinal Dave</a><span> </span>(<a href="https://blog.sqlauthority.com/" data-wpel-link="internal" rel="noopener noreferrer">https://blog.sqlauthority.com/</a>),<span> </span><a href="https://twitter.com/pinaldave" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">X</a></strong></p>
<p>First appeared on <a href="https://blog.sqlauthority.com/2026/07/15/where-should-a-data-quality-check-live-gates-controls-and-quarantine/" data-wpel-link="internal" rel="noopener noreferrer">Where Should a Data Quality Check Live? Gates, Controls, and Quarantine</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.sqlauthority.com/2026/07/15/where-should-a-data-quality-check-live-gates-controls-and-quarantine/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">203032</post-id>	</item>
		<item>
		<title>&#8220;Clean Data&#8221; Is Not a Requirement: Writing Rules People Can Act On</title>
		<link>https://blog.sqlauthority.com/2026/07/14/clean-data-is-not-a-requirement-writing-rules-people-can-act-on/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=clean-data-is-not-a-requirement-writing-rules-people-can-act-on</link>
					<comments>https://blog.sqlauthority.com/2026/07/14/clean-data-is-not-a-requirement-writing-rules-people-can-act-on/#comments</comments>
		
		<dc:creator><![CDATA[Pinal Dave]]></dc:creator>
		<pubDate>Tue, 14 Jul 2026 01:30:29 +0000</pubDate>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[Data Observability]]></category>
		<guid isPermaLink="false">https://blog.sqlauthority.com/?p=203028</guid>

					<description><![CDATA[<p>Clean is a feeling, not a spec. Write data quality rules with a testable check, a threshold, and a named owner, so every failure is obvious and owned.</p>
<p>First appeared on <a href="https://blog.sqlauthority.com/2026/07/14/clean-data-is-not-a-requirement-writing-rules-people-can-act-on/" data-wpel-link="internal" rel="noopener noreferrer">&#8220;Clean Data&#8221; Is Not a Requirement: Writing Rules People Can Act On</a></p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;">Someone once handed me a data project with a single line of guidance. &#8220;Just make sure the data is clean before it hits the report.&#8221; I nodded like it meant something. It meant nothing. But nodding felt professional, so I nodded. What that project needed, and never got, was a set of data quality rules anyone could actually test.</p>
<figure style="text-align: justify;"><img  title="&quot;Clean Data&quot; Is Not a Requirement: Writing Rules People Can Act On dqo-hero-wish-vs-requirement " decoding="async" src="https://blog.sqlauthority.com/wp-content/uploads/2026/07/dqo-hero-wish-vs-requirement.jpg"  alt="&quot;Clean Data&quot; Is Not a Requirement: Writing Rules People Can Act On dqo-hero-wish-vs-requirement "  /></figure>
<p style="text-align: justify;">Two weeks later the report was wrong and we were in a meeting arguing about whether cleaning the data had ever been my job. Nobody could win that argument. &#8220;Clean&#8221; was never defined, so it could not be met, measured, or tested. It was a wish wearing the costume of a requirement.</p>
<p style="text-align: justify;">A requirement you cannot test is not a requirement. It is a hope with better grammar.</p>
<figure style="text-align: justify;"><img  title="&quot;Clean Data&quot; Is Not a Requirement: Writing Rules People Can Act On dqo-diagram-wish-vs-requirement " decoding="async" src="https://blog.sqlauthority.com/wp-content/uploads/2026/07/dqo-diagram-wish-vs-requirement.png"  alt="&quot;Clean Data&quot; Is Not a Requirement: Writing Rules People Can Act On dqo-diagram-wish-vs-requirement "  /><figcaption>A wish cannot be tested. A rule, a threshold, and an owner can.</figcaption></figure>
<h2 style="text-align: justify;">What &#8220;clean&#8221; is actually hiding</h2>
<p style="text-align: justify;">The word feels specific until you try to check it. Clean how? Clean by when? Clean to what standard? Zero errors, or good enough? On every field, or only the ones that matter?</p>
<p style="text-align: justify;">A usable requirement answers those questions with three parts. Get all three and a machine can enforce it and a person can own it. Miss one and it quietly stops working.</p>
<h2 style="text-align: justify;">The three parts of a usable requirement</h2>
<p style="text-align: justify;">Write them in this order. Each part closes a gap the one before it leaves open.</p>
<h3 style="text-align: justify;">Part one: the rule</h3>
<p style="text-align: justify;">The rule is what a check answers with a yes or a no. No opinions, no vibes.</p>
<p style="text-align: justify;">&#8220;The data should be correct&#8221; is not a rule. &#8220;Every order has a region code&#8221; is a rule. You can run it.</p>
<pre><code>-- The rule, written as a test. Zero is a pass.
SELECT COUNT(*) AS failing_rows
FROM sales_orders
WHERE region_code IS NULL;</code></pre>
<p style="text-align: justify;">Written that way, the rule can fail. And a requirement that can fail is one that can pass, which means it is finally real. If yours cannot fail a test, it was never a requirement. It was a mood.</p>
<h3 style="text-align: justify;">Part two: the threshold</h3>
<p style="text-align: justify;">Here is where careful people quietly lose. They write the rule and silently assume the answer must be one hundred percent. Always.</p>
<p style="text-align: justify;">Sometimes it must be. An order id that is supposed to be unique should be unique, full stop, because a duplicate directly overstates revenue. But for plenty of fields, chasing perfection is how you burn a month on the last stubborn half percent that nobody downstream would have noticed.</p>
<p style="text-align: justify;">The threshold says how much deviation you accept. Ninety nine and a half percent of orders carrying a valid region might be fine for a territory report. One hundred percent of order ids being unique is the right call for anything that touches money. Decide the number on purpose and out loud, instead of accidentally promising perfection and then explaining every month why you missed it.</p>
<h3 style="text-align: justify;">Part three: the owner</h3>
<p style="text-align: justify;">A rule and a threshold with no human behind them are decoration. The owner is a real person who can decide what the field means and approve a change to it. Not &#8220;the data team.&#8221; A name.</p>
<p style="text-align: justify;">Why does this matter so much? Because the interesting failures are never &#8220;the value is missing.&#8221; They are &#8220;two teams define region differently and both think they are right.&#8221; Somebody has to be the tiebreaker. If the answer to &#8220;who owns the definition of region&#8221; is a shrug, the requirement dies the first time two people disagree, which is usually week one.</p>
<h2 style="text-align: justify;">Do not forget the service expectation</h2>
<p style="text-align: justify;">There is a quiet fourth part. When must this data be ready, how fresh must it be, and how often is it checked? A correct value that lands an hour after the review is still a miss. Bake the timing into the requirement so nobody argues about it later.</p>
<h2 style="text-align: justify;">Before and after</h2>
<p style="text-align: justify;">Watch a wish turn into a requirement.</p>
<p style="text-align: justify;"><strong>Before:</strong><span> </span>&#8220;The data should be correct.&#8221;</p>
<p style="text-align: justify;"><strong>After:</strong><span> </span>&#8220;order_id is unique across sales_orders, one hundred percent, owned by the sales data lead, checked on every load. Failures block the publish.&#8221;</p>
<p style="text-align: justify;">The first version starts fights. The second one ends them. One is a feeling. The other is a line in a data contract that a machine enforces and a named person answers for. When the check fails there is no debate about whose job it is, what &#8220;correct&#8221; meant, or whether it is bad enough to matter. It is all right there in the sentence.</p>
<h2 style="text-align: justify;">A quick test for your data quality rules</h2>
<p style="text-align: justify;">Take any expectation floating around your team right now. Say it out loud, then ask three questions. Can I write it as a check that returns a number? Have I decided what number counts as passing? Can I name the person who owns it?</p>
<p style="text-align: justify;">Three yeses and you have a requirement. A shrug on any of them and you have a preference. And preferences do not survive contact with a busy quarter.</p>
<p style="text-align: justify;">Clean is a feeling. A rule, a threshold, and an owner is a plan. Write the plan.</p>
<blockquote><p>If you want to see rules, thresholds, and contracts come together into a full requirements pack, I build it step by step in my Pluralsight course,<span> </span><a href="https://www.pluralsight.com/courses/data-quality-define-requirements" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">Define Data Quality Requirements</a>.</p></blockquote>
<p style="text-align: justify;">Reference:<span> </span><strong><a href="https://blog.sqlauthority.com/" data-wpel-link="internal" rel="noopener noreferrer">Pinal Dave</a><span> </span>(<a href="https://blog.sqlauthority.com/" data-wpel-link="internal" rel="noopener noreferrer">https://blog.sqlauthority.com/</a>),<span> </span><a href="https://twitter.com/pinaldave" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">X</a></strong></p>
<p>First appeared on <a href="https://blog.sqlauthority.com/2026/07/14/clean-data-is-not-a-requirement-writing-rules-people-can-act-on/" data-wpel-link="internal" rel="noopener noreferrer">&#8220;Clean Data&#8221; Is Not a Requirement: Writing Rules People Can Act On</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.sqlauthority.com/2026/07/14/clean-data-is-not-a-requirement-writing-rules-people-can-act-on/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">203028</post-id>	</item>
	</channel>
</rss>
