5 SQL Mistakes You’re Probably Making
SQL is more than just a tool—it’s a gateway to transform curiosity into concrete information. Using SQL requires a blend of precision with creativity and curiosity.
The truth is, writing queries can be easy. But writing queries without syntax errors that you can pick up again in 2 months & remember your thought process – Well, that isn’t easy. There are a lot of moving parts through many iterations. It’s easy to make mistakes, especially under the pressure of deadlines.
I’ve helped dozens of analysts new to SQL work through errors and inaccurate results. Through this I’ve seen common SQL mistakes crop up again and again.
In this piece, we dive into those errors. But more than that, we’re going to dig into the ‘why’ behind these mistakes. To prevent them, I want to shift your approach from simply writing queries to thinking strategically about data.
My hope is that you’ll avoid hours of trial & error to fast-track your SQL work. Let’s get started!
SQL Mistake 1: Getting the Basics Wrong
This is the easiest SQL mistake of all. For everyone. Syntax errors. They aren’t the end of the world, but this is part of what makes analysis so time-consuming – dealing with errors & problems.
Syntax errors are when you write the query incorrectly in a way that SQL simply can’t execute. You’ll get an error if you don’t have the right number of open & closed parenthesis and a long list of other infractions.
I get it! Even with my decades of experience, I run into this. Moving from SQL in SQL Server to using custom SQL in Tableau means I need to make changes to my queries. There are nuances moving from 1 tool to another even if both use SQL. And remembering what each tool wants feels like a lost cause!
There is good news even if you’re someone who ‘just isn’t a coder’. Practice will make you better & faster with the basic syntax rules.
How to solve it:
Here are a few tricks to reduce your errors:
- Use brackets for column names and quotes for column alias. I like to do this even though it isn’t a must. It accounts for spaces or special characters that may exist. Plus, it’s a visual clue for items that are tables or column names vs SQL-specific code. It’s incredibly useful when I’m scanning code that’s hundreds of lines long.
- Don’t assign names to a column for example that is also a SQL command
- Always experiment on a small sample of your data. You can do this by using a TOP 50 in your SELECT statement or a LIMIT 50 depending on your environment.
- Pay attention to the order of your clauses: SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY, LIMIT
- Use a code editor that highlights elements. If an item is usually blue & it’s not this time, it clues you in that something is misspelled.
- Use table aliases throughout your query. An alias is an abbreviation for a table name. Use them each time you reference a column. This prevents issues when there are identical column names across tables.
- Hang a cheat sheet in your line of sight. Lucky you! I’ve got one for you right here!
Oh & bonus tip – if your code editor doesn’t default to show row numbers, do a search NOW to figure out how to turn them on!
I’ve never seen an editor that doesn’t have the option, but it’s usually hidden & doesn’t default to on. Chances are, the errors (aka more SQL mistakes) the system will throw at you will reference a row. Row numbers make your life easier, so get that breadcrumb turned on for your sanity!
SQL Mistake 2: Complicating Queries Unnecessarily
It’s funny how what starts as a simple SELECT statement ends up a 999 rows of code. Long doesn’t necessarily mean complicated. But complex queries make it that much more difficult to read & diagnose errors. Plus there are likely some performance issues thrown in the longer the code gets.
Think of it this way: Every extra join, subquery, or function is another potential point of failure.
I get it! What starts as a simple request simply grows to meet the needs you’re covering. Run into a new problem, google your way through it, and ta-da! It works! And then layer another 50 of those moments until you have a complicated query on your hands.
But is it more of a SQL mistake instead of a conscious path to build a repeatably efficient query? I find when a beginner to SQL ends up with correlated subqueries and cartesian joins to be culprits here. And they don’t know what those terms are, understandably!
Correlated subqueries: Each step in the query depends on the previous step, creating a loop of dependence that can slow things down. It’s a query within your main query that refers back to the main query. This makes the database work harder to get your results
Cartesian joins: These happen when you accidentally link every row of one table with every row of another. This often happens because of a missing or incorrect join condition. This leads to a massive grid of data, most of which you don’t need, bogging down the system.
HOW TO SOLVE IT:
Here’s how you can keep your SQL mistakes to a minimum without overcomplicating queries:
- Start Simple: Always begin with the most basic version of your query. Make it work, then gradually add to it if necessary. You’re building a solid foundation before adding.
- Break It Down: When working through a challenge, I like to chop it into smaller pieces. Handle the pieces one at a time. Feel good with the output & then see if you can match the results when you mesh it back together. Or leave them separate if you can.
- Avoid Over-Engineering: Before adding that correlated subquery or setting up a join, ask yourself if there’s a simpler way to get the same result. The best solution is the simplest one.
- Test as You Go: Regularly run and test your queries as you build them. This includes validating the results as you add on layers of complexity. This practice helps you catch any errors, issues & tackle that complexity as soon as you can before it becomes an unwieldy beast of code.
By following these tips, you’ll keep your SQL queries streamlined and efficient. They’ll do exactly what you need without the added complexity.
I’ve got a cheat-sheet here to help you write better queries.
SQL Mistake 3: Don’t Assume Your Data is Clean & Ready to Go
Data is a messy business. Yes, there’s a smart team of people that built the database you’re working with. Yes, they have rules they adhere to for the best results. But data is rarely perfect.
Take, for example, a lapse analysis I once did. I was new to the data & given FIRM parameters for filters and such. I am soooo glad I did some exploratory data analysis. Learn about EDA here. The client was so firm with his parameters that there was no need for me to do any exploration. It turned out that 10% of the customers were somehow 160 years old in the dataset! Unless we’re analyzing a vampire fan club, that’s not just unlikely; it’s impossible. It’s these kinds of anomalies that can skew your results and lead to misguided conclusions.
Exploring your data for cleanliness isn’t about scrubbing each record spotless – you need to know what you’re dealing with. It saves you from making mistakes or bad assumptions – like age columns filled with impossible numbers.
HOW TO SOLVE IT:
Here’s how you can ensure your data is in good shape before you start your SQL queries:
- Preview Your Data: ALWAYS take a look at your data. Look for obvious issues like missing values, strange outliers, or inconsistent formats. MIN, MAX, a histogram, anything!
- Run Basic Checks: Run simple SQL queries to check for common data issues. For instance, use COUNT and DISTINCT to check for duplicate or missing entries or MIN and MAX to spot unrealistic values.
- Understand the Context: Know what the data should represent. Understanding the context helps you quickly identify when something seems off. If you’re analyzing customer ages, for instance, does the data reflect realistic age ranges?
- Use Descriptive Statistics: Get a sense of your data’s make-up & distribution. This can be like the range, mean, median, standard deviation or whatever you’re willing to do. This can show anomalies or patterns worth investigating further.
- Seek Clarification When Needed: If something looks off, ask questions or investigate further. Sometimes a quick conversation with a colleague can save hours of confusion.
- Document Your Findings: Keep a record of any data quirks or issues you find. This documentation can be invaluable for future analysis. If nothing else, it might come in handy for your footnotes so that you’re transparent.
By taking the time to explore and understand your data at the outset, you can save yourself from the headaches of dealing with dirty data down the line. It’s about making SQL mistakes a non-event!
SQL Mistake 4: Neglecting Readability & Documentation
Have you ever questioned your intelligence when you had to step back into a query you wrote months ago? And if it’s someone else’s code? You might as well be trying to read hieroglyphics. Grab your coffee & settle in for “one of those days” if that’s on your agenda.
One of the mistakes that can make SQL work harder than it needs to be is not paying attention to formatting and documentation. Seriously – both don’t have to take a lot of time, and both make it easier to pull up the query to maintain or do a quick run.
But please don’t mistake formatting a SQL query for readability as about making them look pretty. It’s about structuring code in a way that’s easy to follow. I’m a big fan of brackets for columns & indenting clauses like your FROM & WHERE under SELECT statements. Some editors will throw a default format. It’s worth a quick search if the time to format is a barrier.
Comments, on the other hand, are like your notes in the margins or your notebook. They are the breadcrumbs to future readers (including yourself) about why you did what you did. Ever come back to a query and wonder, “Why on earth did I write it this way?” Comments can save you from those moments.
HOW TO SOLVE IT:
Here are some tips to enhance the readability and documentation of your SQL queries:
- Consistent Formatting: Indentation, capitalization of SQL keywords, and line breaks makes your query easier to scan and understand.
- Meaningful Comments: Add comments to explain the purpose of complex parts of your query or to highlight why a certain approach was taken. It’s like leaving signposts along your code.
- Descriptive Naming: Use clear and descriptive names for tables, aliases, and fields. Avoid cryptic abbreviations – ‘custOrders’ is more understandable than ‘cstOrds’.
- Section Dividers: For longer queries, use comments as section dividers to separate different parts of your query. My fav /*********************************************************/. Your editor will shade it & the visual break-up in the code tells me it’s a different section.
- Keep It Clean: Regularly review your queries. Remove unused fields, redundant conditions, and outdated comments to keep your code clean.
Incorporating these practices makes your future-self have a better day. It also ensures that anyone who follows behind you won’t have to play detective to understand your work.
SQL Mistake 5: Query Performance Matters
It’s easy to get caught up in getting the right results from your SQL queries that you forget to ask yourself, “How efficiently am I getting these results?” Well, until you’ve bogged down your computer & maybe the whole database. There’s no need to burn through more resources than necessary… including your time.
Poorly optimized queries drain database resources. This becomes more obvious when dealing with large datasets. This slows down your work & even affects others who are accessing the same database. Traffic jam database style.
The performance of your query is not just about speed; it’s also about resource utilization. Efficient queries use less memory, CPU, and disk space, making the whole system more responsive and reliable.
HOW TO SOLVE IT:
To ensure your SQL queries are as efficient as possible, consider these strategies:
- Optimize JOINs: Evaluate your JOINs. Make sure they’re necessary and you’re using the most efficient type of JOIN for your specific scenario.
- Limit Data: Don’t pull more data than you need. Use
LIMIT
orTOP
to restrict the amount of data returned, especially when exploring and debugging. - Aggregate Efficiently: Limit the columns in the GROUP BY when using COUNT, SUM, etc.
- Avoid Nested Queries: When possible, avoid deeply nested queries. They can be hard to optimize and understand. Look for ways to simplify them or even better – break them into separate queries. I find temporary tables to be an easy way to do this.
By focusing on these aspects, your SQL queries will be efficient AND more likely to be accurate.
Grab my free SQL cheat-sheet to keep your queries simple & clean on the fly.
SQL Mistakes Are Going to Happen
If you’ve been making these mistakes, just know that you’re not alone. There’s so many tools & nuances between tools for us to master! Even after years of SQL experience & an Oracle SQL certification in my toolbox, I’m still working on my skills.
The good thing is that once you’re aware of these pitfalls, you can start making the changes you need to level up your SQL querying skills.
In fact, by reading this post you’ve just taken a huge step toward doing that. High-five! ✋
If you want help to level-up, I invite you to check out SQL Jump-Start: From Database Basics to Writing Your First Query.
If you’re like me & learned SQL on the fly, this is the course that will help you avoid those mistakes. It’s designed to:
- Streamline your learning process
- Help you overcome common pitfalls
- Emerge as a confident data analyst that can use SQL – without crashing the database!