When I have a switch node that it’s possible for an output to have empty output, the always output goes through the first output rather than the output that is empty
When always output is enabled, it should go down the output in question.
In the example below all outputs should have an output, the first 2 should be empty but still continue the flow.
Yeah this is a known bug with the Switch node, when “Always Output Data” is enabled it incorrectly pushes the empty item through the first output instead of through whichever output actually had no matches. There’s a GitHub issue tracking it here: Switch node always trigger its first node · Issue #17504 · n8n-io/n8n · GitHub
The workaround for now is to turn off “Always Output Data” on the Switch and instead add a No Operation node or similar after each output to handle the case where nothing comes through. Not ideal but it gets the job done until they fix the underlying routing logic.
The filter approach @kr-nn landed on is actually a solid pattern, and worth understanding why it works better here.
The root issue with “Always Output Data” + Switch is that it was designed to prevent downstream nodes from stalling when no items match — but the implementation routes that empty item through output 0 instead of through the specific output that received no matches, which is clearly wrong behavior. The GitHub issue #17504 tracks it.
The filter-per-output approach avoids this entirely because each Filter node independently evaluates items and only passes through items that match its condition. If nothing matches, that branch simply stops — which is the behavior you actually want. The tradeoff is that you lose the Switch node’s centralized rule management UI, but for production workflows it’s more predictable.
One thing to watch: if you need ALL items to eventually exit the flow even when a given branch gets nothing, you can add a Merge node at the end that waits for all branches. That way your downstream logic still runs even if some branches passed zero items through. Configure it in “Merge By Position” or “Combine” mode depending on your data shape.
The “series of filters” solution you landed on is exactly what I use too for any conditional routing where branch isolation matters.