Duplicate table aliasesSQL-L020Unused table aliasSQL-L025Undefined reference detectedSQL-L026Unqualified referencesSQL-L027Keyword used as an identifierSQL-L029Inconsistent capitalization detectedSQL-L014Inconsistent capitalisation of keywordsSQL-L010Implicit aliasing of table detectedSQL-L011Implicit aliasing of column detectedSQL-L012Column expression without alias detectedSQL-L013`DISTINCT` with parenthesisSQL-L015Ambiguous use of `DISTINCT`SQL-L021Trailing commas within `SELECT` clauseSQL-L038Unnecessary whitespace foundSQL-L039Inconsistent referencesSQL-L028Unnecessary trailing whitespaceSQL-L001Mixed Tabs and Spaces in single whitespaceSQL-L002Expected a single whitespace after `AS`SQL-L023Expected a single whitespace after `USING`SQL-L024Files must end with a trailing newlineSQL-L009Line too longSQL-L016Inconsistent function namesSQL-L030Indentation not consistent with previous linesSQL-L003Operators placed before the newlineSQL-L007Missing whitespace after a commaSQL-L008Function name not immediately followed by bracketSQL-L017Misaligned closing bracketSQL-L018Mixed comma style foundSQL-L019Missing blank lineSQL-L022Mixed Tab and Space indentationSQL-L004Multiple whitespaces around an operatorsSQL-L006Commas has whitespace directly before themSQL-L005Inconsistent capitalisation of boolean or null literalSQL-L040Misaligned `SELECT` modifierSQL-L041Table aliasing in `FROM` and `JOIN` operatorsSQL-L031Confusing use of `USING` operatorSQL-L032File start with ' ' or other whitespaceSQL-L050Unqualified use of `JOIN` clauseSQL-L051Subquery found in `JOIN`SQL-L042Unidiomatic `NULL` checksSQL-L049Unflattened `CASE` statements in `ELSE` clauseSQL-L058Multiple `SELECT` targets on same lineSQL-L036Ambiguous ordering directions for columns in `ORDER BY` clauseSQL-L037Unidiomatic use of `UNION` operatorSQL-L033Unidiomatic `SELECT` operand arrangementSQL-L034Redundant `ELSE NULL`SQL-L035Unnecessary `CASE` statementSQL-L043Unknown number of resulting columnsSQL-L044Unused Common Table Expression in querySQL-L045Use of non-ANSI spec syntax for `COUNT` all rowsSQL-L047Inconsistent styling around string literalsSQL-L048Improperly placed semi-colon(`;`) at statement endSQL-L052Use of brackets wrapping top-level codeSQL-L053Inconsistent column references in `GROUP BY`/`ORDER BY`SQL-L054Use `LEFT JOIN` instead of `RIGHT JOIN`SQL-L055
SQL logoSQL/
SQL-L044

Unknown number of resulting columnsSQL-L044

Minor severityMinor
Anti-pattern categoryAnti-pattern

Queries that produce an unknown number of result columns are an anti-pattern.

Querying all columns using * produces a query result where the number or ordering of columns changes if the upstream table’s schema changes.

This should generally be avoided because it can cause slow performance, cause important schema changes to go undetected, or break production code.

Eg, If a query does SELECT t.* and is expected to return columns a, b, and c, the actual columns returned will be wrong/different if columns are added to or deleted from the input table.

Bad practice

WITH cte AS (
    SELECT * FROM foo
)

SELECT * FROM cte
UNION
SELECT a, b FROM t

Specify columns explicitly.

WITH cte AS (
    SELECT * FROM foo
)

SELECT a, b FROM cte
UNION
SELECT a, b FROM t