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)).
```

ColumnWithTypeAndName column;
            column.name = res_elem.type->getName();
            column.column = DataTypeString().createColumnConst(0, column.name);
            column.type = std::make_shared<DataTypeString>();
            const auto * right_arg = &actions_dag->addColumn(std::move(column));
            const auto * left_arg = dst_node;
            FunctionCast::Diagnostic diagnostic = {dst_node->result_name, res_elem.name};
            FunctionOverloadResolverPtr func_builder_cast = CastOverloadResolver<CastType::nonAccurate>::createImpl(false, std::move(diagnostic));
            NodeRawConstPtrs children = { left_arg, right_arg };
            dst_node = &actions_dag->addFunction(func_builder_cast, std::move(children), {});
        }
        if (dst_node->column && isColumnConst(*dst_node->column) && !(res_elem.column && isColumnConst(*res_elem.column)))
        {
            NodeRawConstPtrs children = {dst_node};
            dst_node = &actions_dag->addFunction(func_builder_materialize, std::move(children), {});
        }
        if (dst_node->result_name != res_elem.name)
        {
            if (add_casted_columns)
            {
                if (inputs.contains(dst_node->result_name))
                    throw Exception("Cannot convert column " + backQuote(res_elem.name) +
                                    " to "+ backQuote(dst_node->result_name) +
                                    " because other column have same name",
                                    ErrorCodes::ILLEGAL_COLUMN);
                if (new_names)
                    new_names->emplace(res_elem.name, dst_node->result_name);
                
                projection[result_col_num] = src_node;
                projection.push_back(dst_node);