Opción Paréntesis en nueva línea

Paréntesis en nueva línea controla dónde va un paréntesis de apertura cuando inicia un bloque con sangría: al final de la línea que lo introduce (el valor predeterminado) o en una línea propia. Esta página muestra exactamente qué paréntesis se mueven, con salida real para las dos configuraciones.

Qué hace la opción

Cuando el formateador abre un bloque entre paréntesis, como una subconsulta después de IN, aplica un nivel de sangría al contenido y pone el paréntesis de cierre en su propia línea. Lo único que queda por decidir es dónde va el paréntesis de apertura:

  • Desactivada (predeterminado): se queda al final de la línea que lo introduce, como en WHERE id IN (.
  • Activada: la línea que lo introduce termina con la palabra clave (WHERE id IN), y el paréntesis va en su propia línea, con la misma sangría que la línea a la que pertenece.

El contenido y el paréntesis de cierre se disponen igual en los dos modos. Solo se mueve un carácter.

Valores posibles y valor predeterminado

ValorResultado
Desactivada (predeterminado)IN (, AS (, FROM ( en una sola línea
ActivadaEl paréntesis de apertura queda solo en la línea siguiente, alineado con su paréntesis de cierre

Subconsulta después de IN

Es el caso más común. Compara la línea que sigue a WHERE id IN en las dos salidas:

Antes
select name, email from customers where id in (select customer_id from orders where total > 500 and status = 'PAID')
Después, formateado por SQL Format
Opciones: Espacios de sangría 4 · Cantidad máxima de columnas 120 · Comas: Después · Palabras clave: Mayúsculas · Paréntesis en nueva línea: no
SELECT name,
    email
FROM customers
WHERE id IN (
    SELECT customer_id
    FROM orders
    WHERE total > 500
    AND status = 'PAID'
)
Después, formateado por SQL Format
Opciones: Espacios de sangría 4 · Cantidad máxima de columnas 120 · Comas: Después · Palabras clave: Mayúsculas · Paréntesis en nueva línea: sí
SELECT name,
    email
FROM customers
WHERE id IN
(
    SELECT customer_id
    FROM orders
    WHERE total > 500
    AND status = 'PAID'
)

Con la opción activada, los paréntesis de apertura y de cierre quedan en la misma columna, uno encima del otro, con la subconsulta entre ellos.

CTE y tablas derivadas

El cuerpo de una expresión de tabla común (CTE) y una tabla derivada en FROM se comportan igual. La línea WITH recent AS y la línea FROM pierden su paréntesis, que pasa a la línea siguiente:

Antes
with recent as (select customer_id, sum(total) as total from orders where created_at >= current_date - 90 group by customer_id) select x.region, sum(x.total) as region_total from (select t.region, r.total from recent r join territories t on t.customer_id = r.customer_id) x group by x.region
Después, formateado por SQL Format
Opciones: Espacios de sangría 4 · Cantidad máxima de columnas 120 · Comas: Después · Palabras clave: Mayúsculas · Paréntesis en nueva línea: no
WITH recent AS (
    SELECT customer_id,
        SUM(total) AS total
    FROM orders
    WHERE created_at >= CURRENT_DATE - 90
    GROUP BY customer_id
)
SELECT x.region,
    SUM(x.total) AS region_total
FROM (
    SELECT t.region,
        r.total
    FROM recent r
        JOIN territories t
            ON  t.customer_id = r.customer_id
) x
GROUP BY x.region
Después, formateado por SQL Format
Opciones: Espacios de sangría 4 · Cantidad máxima de columnas 120 · Comas: Después · Palabras clave: Mayúsculas · Paréntesis en nueva línea: sí
WITH recent AS
(
    SELECT customer_id,
        SUM(total) AS total
    FROM orders
    WHERE created_at >= CURRENT_DATE - 90
    GROUP BY customer_id
)
SELECT x.region,
    SUM(x.total) AS region_total
FROM
(
    SELECT t.region,
        r.total
    FROM recent r
        JOIN territories t
            ON  t.customer_id = r.customer_id
) x
GROUP BY x.region

Lo mismo ocurre con la lista de columnas y la lista de VALUES de un INSERT y con las definiciones de columnas de un CREATE TABLE, que el formateador también dispone como bloques con sangría. Una lista de una sola columna, como INSERT INTO t (id), se queda en línea y no se mueve.

Llamadas a funciones y listas de valores

La opción se fija en la disposición, no en el tipo de paréntesis. Todo paréntesis que abre un bloque con sangría se mueve, y todo paréntesis que se queda en línea no. La única excepción es la especificación de ventana: OVER ( siempre se queda en la línea de su función, en los dos modos.

Antes
select id, count(*) as items, coalesce(discount_code, 'NONE') as discount, (select max(shipped_at) from shipments s where s.order_id = o.id) as last_shipment from orders o where status in ('PAID', 'SHIPPED') group by id, discount_code
Después, formateado por SQL Format
Opciones: Espacios de sangría 4 · Cantidad máxima de columnas 120 · Comas: Después · Palabras clave: Mayúsculas · Paréntesis en nueva línea: no
SELECT id,
    COUNT(*) AS items,
    COALESCE(
        discount_code,
        'NONE'
    ) AS discount,
    (
        SELECT
            MAX(shipped_at)
        FROM shipments s
        WHERE s.order_id = o.id
    ) AS last_shipment
FROM orders o
WHERE status IN (
    'PAID',
    'SHIPPED'
)
GROUP BY id,
    discount_code
Después, formateado por SQL Format
Opciones: Espacios de sangría 4 · Cantidad máxima de columnas 120 · Comas: Después · Palabras clave: Mayúsculas · Paréntesis en nueva línea: sí
SELECT id,
    COUNT(*) AS items,
    COALESCE
    (
        discount_code,
        'NONE'
    ) AS discount,
    (
        SELECT
            MAX(shipped_at)
        FROM shipments s
        WHERE s.order_id = o.id
    ) AS last_shipment
FROM orders o
WHERE status IN
(
    'PAID',
    'SHIPPED'
)
GROUP BY id,
    discount_code

En este ejemplo:

  • COUNT(*) y MAX(shipped_at) se quedan en una sola línea, así que sus paréntesis no se tocan.
  • COALESCE se divide en un argumento por línea, así que, con la opción activada, su paréntesis pasa a la línea siguiente, con la misma sangría que el nombre de la función.
  • La lista de valores IN ('PAID', 'SHIPPED') también se divide en un valor por línea, y su paréntesis se mueve exactamente igual que el de una subconsulta.
  • La subconsulta escalar de la lista del select ya empieza con su paréntesis en una línea propia, así que las dos salidas son idénticas en ese punto.

Cuándo activarla

Las dos configuraciones son el equivalente en SQL del debate sobre dónde poner las llaves en los lenguajes derivados de C.

Déjala desactivada para una salida compacta que se parezca a la mayor parte del SQL de la documentación y de las guías de estilo publicadas, donde WITH name AS ( e IN ( son la forma habitual de escribirlo. Cada bloque ocupa una línea menos, y la palabra clave que abre el bloque queda visualmente pegada a él. El paréntesis de cierre se alinea con el inicio de la línea que abrió el bloque, lo que alcanza para encontrar el par en la mayoría de las consultas.

Actívala cuando trabajes con consultas largas y muy anidadas y quieras emparejar los paréntesis a simple vista. Como los paréntesis de apertura y de cierre comparten columna, las guías de sangría del editor o un rápido recorrido vertical muestran dónde empieza y termina cada bloque. Algunos equipos también consideran que una palabra clave sola al final de una línea (IN, AS, FROM) indica claramente que a continuación viene un bloque.

Los costos son una línea extra por bloque, que se acumula en consultas con muchas CTE, y llamadas a funciones que se leen de forma un poco inusual, con COALESCE en una línea y su paréntesis en la siguiente. Si la mayoría de tus bloques largos son CTE y subconsultas, el intercambio puede valer la pena; si la mayoría son llamadas a funciones divididas, el valor predeterminado suele leerse mejor.

La sangría dentro de cada bloque proviene de Espacios de sangría y no cambia con esta opción. Mover el paréntesis no alarga ninguna línea, así que nunca provoca cortes adicionales por Cantidad máxima de columnas. Comas y Palabras clave se aplican al contenido del bloque como siempre. Para consejos más amplios sobre cómo estructurar consultas anidadas, CTE y subconsultas antes de formatearlas, consulta formateo de consultas complejas, y prueba las dos configuraciones con tu propio SQL en el formateador: se cambia con un solo clic.