DS_BCAST_INNER / DS_BCAST_ALLThe inner (or all) rows of one side are copied — broadcast — to every compute node before joining. Cheap for small dimension tables, expensive for anything large.
DS_DIST_NONEBoth sides already live on the same slice for matching keys, so no data movement is needed. This is the join you want.
DS_DIST_INNER / DS_DIST_BOTH / DS_DIST_ALLRedshift redistributes (shuffles) rows across the network before joining, because the tables aren't distributed on the join key. Costly at scale.
Nested LoopRedshift's fallback when it can't find an equality join condition. Compares every row on one side against every row on the other — scales terribly.
Non-sargable predicateA function or type cast (e.g. lpad(), ::text) applied to a join or filter column. It usually means a datatype mismatch, and it stops Redshift from pruning blocks efficiently.
Seq ScanA full read of a table (or subquery result). Normal for small tables; worth a second look on large ones with no Filter.
Cost cliffA step whose estimated cost is many orders of magnitude above its inputs — a strong signal of a Cartesian-like join or badly matched distribution keys.