You have to provide the following information whenever possible.

**Describe the bug**
This query fails with the latest stable version 21.5.5.12. It worked with the last stable version 21.4.7.3.

**Does it reproduce on recent release?**
yes

**How to reproduce**
21.5.5.12

```
SELECT
    label,
    number
FROM
(
    SELECT
        'a' AS label,
        number
    FROM
    (
        SELECT number
        FROM numbers(10)
    )
    UNION ALL
    SELECT
        'b' AS label,
        number
    FROM
    (
        SELECT number
        FROM numbers(10)
    )
)
WHERE number IN
(
    SELECT number
    FROM numbers(5)
)
```

**Expected behavior**
Query should run without errors

**Error message and/or stacktrace**
```
Received exception from server (version 21.5.5):
Code: 49. DB::Exception: Received from localhost:9000. DB::Exception: Block structure mismatch in Pipe::unitePipes stream: different names of columns:
label String String(size = 0), number UInt64 UInt64(size = 0), 'b' String Const(size = 0, String(size = 1))
label String String(size = 0), number UInt64 UInt64(size = 0), 'a' String Const(size = 0, String(size = 1)).
```

}
                    node_to_column[node] = executeActionForHeader(node, std::move(arguments));
                }
            }
            if (node_to_column[output].column)
                result_columns.push_back(node_to_column[output]);
        }
    }
    if (isInputProjected())
        header.clear();
    else
        header.erase(pos_to_remove);
    Block res;
    for (auto & col : result_columns)
        res.insert(std::move(col));
    for (const auto & item : header)
        res.insert(std::move(item));
    return res;
}
NameSet ActionsDAG::foldActionsByProjection(
    const NameSet & required_columns, const Block & projection_block_for_keys, const String & predicate_column_name, bool add_missing_keys)
{
    std::unordered_set<const Node *> visited_nodes;
    std::unordered_set<std::string_view> visited_index_names;
    std::stack<Node *> stack;
    std::vector<const ColumnWithTypeAndName *> missing_input_from_projection_keys;
    for (const auto & node : index)
    {
        if (required_columns.find(node->result_name) != required_columns.end() || node->result_name == predicate_column_name)
        {