There are two types of complexity that you can encounter in SQL queries.
First, the complexity can be directly visible in the query, if it has hundreds or even thousands of rows of SQL code in a single query. This can cause both maintenance headaches and slow execution.
The complexity can also be hidden in subviews, so the SQL code of the query may seem simple, but it uses other views and/or functions to do part of the work, which in turn can use others. This is much better for maintenance, but it can still cause performance problems.
Both types of queries can either be written manually by programmers or data analysts, or can emerge as a result of a query generator.