Skip to main content

ON Clause Breaking

Break JOIN ON conditions to their own indented line when the condition is long or complex.

Default: onClauseNewline=never — ON stays inline with JOIN (current behavior). Always: onClauseNewline=always — ON always breaks to its own line. Width-aware: onClauseNewline=width_aware — ON breaks when condition exceeds half of maxLineWidth.

Default: ON stays inline

select a from t1 inner join t2 on t1.id = t2.id
select a from t1 inner join t2 on t1.id = t2.id

Always: ON breaks to own line

select a from t1 inner join t2 on t1.id = t2.id
select a from t1 inner join t2 on t1.id = t2.id

Always: ON with AND condition

select a from t1 inner join t2 on t1.id = t2.id and t1.x = t2.x
select a from t1 inner join t2 on t1.id = t2.id and t1.x = t2.x

Always: multiple JOINs

select a from t1 inner join t2 on t1.id = t2.id left join t3 on t2.id = t3.id
select a
from t1
inner join t2 on t1.id = t2.id
left join t3 on t2.id = t3.id

Single JOIN

select a from t1 inner join t2 on t1.id = t2.id
select a from t1 inner join t2 on t1.id = t2.id

Width-aware: short ON stays inline

select a from t1 join t2 on t1.id = t2.id
select a from t1 join t2 on t1.id = t2.id

Width-aware: long ON breaks

select a from t1 join t2 on t1.customer_id = t2.customer_id and t1.order_date = t2.order_date and t1.region = t2.region
select a
from t1
join t2
on
t1.customer_id = t2.customer_id
and t1.order_date = t2.order_date
and t1.region = t2.region

USING stays inline regardless

select a from t1 join t2 using (id)
select a from t1 join t2 using(id)