How to fix Duplicate alias in PostgreSQL

PostgreSQLINTERMEDIATEMEDIUMUpdated Dec 27, 2025ยท 131 views

PostgreSQL throws this error when a query uses the same alias name for multiple columns, table joins, or expressions. Fix it by ensuring each alias is unique within the query scope.

Quick fix

Fixes Duplicate alias

SELECT u.name AS name, c.name AS name FROM users u JOIN companies c ON u.company_id = c.id;
  1. Identify all aliases in your query
  2. Rename duplicate aliases to be unique
  3. Use aliases in subsequent clauses correctly
  4. Test the modified query
postgresql โ€” error
SELECT u.name AS name, c.name AS name FROM users u JOIN companies c ON u.company_id = c.id;
Duplicate alias

What this error means

The "Duplicate alias" error (error code 42712) occurs when PostgreSQL encounters two or more identically named aliases in a single query. Aliases provide alternative names for columns or tables, but each must be unique to avoid ambiguity. When PostgreSQL processes your query, it cannot determine which duplicate alias you're referring to in clauses like WHERE, ORDER BY, or JOIN conditions. This becomes especially problematic in complex queries with subqueries, CTEs, or multiple joins where the same table name or column name might be aliased multiple times with the same identifier.

Typical symptoms

  • Query execution fails with "ERROR: duplicate alias" message
  • Table aliases conflict when using multiple JOINs with the same alias name
  • Subqueries or CTEs produce duplicate alias errors
  • Columns with identical aliases cause result set ambiguity
  • Application ORMs (Laravel, Yii) generate queries with duplicate aliases

Common causes

  1. Using the same alias name for multiple columns in the SELECT list
  2. Joining the same table multiple times without unique aliases
  3. Nested joins or subqueries reusing the same table alias
  4. Auto-generated queries from frameworks that don't properly alias repeated table references
  5. Complex CTEs (Common Table Expressions) with overlapping alias names

How to fix "Duplicate alias"

1Identify all aliases in your query

Review your SQL statement and list every alias you've created using AS. Look at:
- Column aliases in SELECT clauses
- Table aliases in FROM and JOIN clauses
- Subquery and CTE aliases

Example of problematic query:

sql
SELECT u.name AS name, c.name AS name FROM users u JOIN companies c ON u.company_id = c.id;
2Rename duplicate aliases to be unique

Give each alias a distinct, meaningful name that indicates what it represents. Use naming conventions that make the alias's purpose clear.

Fixed version:

sql
SELECT u.name AS user_name, c.name AS company_name FROM users u JOIN companies c ON u.company_id = c.id;

For multiple references to the same table:

sql
SELECT p1.id AS parent_id, p2.id AS child_id FROM products p1 JOIN products p2 ON p1.id = p2.parent_id;
3Use aliases in subsequent clauses correctly

Once you've renamed aliases to be unique, ensure any references in WHERE, ORDER BY, GROUP BY, or HAVING clauses use the new distinct alias names.

Example:

sql
SELECT 
  u.id AS user_id, 
  u.name AS user_name, 
  c.name AS company_name
FROM users u 
JOIN companies c ON u.company_id = c.id
WHERE u.active = true
ORDER BY user_name, company_name;
4Test the modified query

Execute your query in the PostgreSQL client (psql) or your application to verify:
- No alias errors occur
- Results are correct and contain all expected columns
- Output column names are clear and descriptive

bash
psql -U username -d database_name -c "SELECT ...";

Advanced notes

PostgreSQL's handling of duplicate aliases has evolved over versions. In PostgreSQL 9.3.0, duplicate table aliases within nested JOINs were temporarily rejected due to the LATERAL patch, but this was restored in 9.3.2 to maintain backward compatibility. However, the best practice is always to use unique aliases to avoid confusion and ensure query portability. When working with frameworks like Laravel or Yii, update your query builder calls to properly alias repeated table references. If you're building dynamic queries, implement alias tracking to ensure each reference gets a unique identifier.

Frequently asked questions

What does "Duplicate alias" mean?
The "Duplicate alias" error (error code 42712) occurs when PostgreSQL encounters two or more identically named aliases in a single query. Aliases provide alternative names for columns or tables, but each must be unique to avoid ambiguity. When PostgreSQL processes your query, it cannot determine which duplicate alias you're referring to in clauses like WHERE, ORDER BY, or JOIN conditions.
How do I fix "Duplicate alias"?
PostgreSQL throws this error when a query uses the same alias name for multiple columns, table joins, or expressions. Fix it by ensuring each alias is unique within the query scope.
What causes "Duplicate alias"?
Using the same alias name for multiple columns in the SELECT list Joining the same table multiple times without unique aliases Nested joins or subqueries reusing the same table alias
Is the "Duplicate alias" error serious?
It is a medium-severity error โ€” more of a blocker than a risk. The steps above resolve it.

Official resources & further reading