code: protected function getUniqueColumns($columns)
      {
          $unaliasedColumns = $this->getUnaliasedColumnsFromSelect();
  
          $result = [];
          foreach ($columns as $columnAlias => $columnDefinition) {
              if (!$columnDefinition instanceof Query) {
                  if (is_string($columnAlias)) {
                      $existsInSelect = isset($this->select[$columnAlias]) && $this->select[$columnAlias] === $columnDefinition;
                      if ($existsInSelect) {
                          continue;
                      }
                  } elseif (is_int($columnAlias)) {
                      $existsInSelect = in_array($columnDefinition, $unaliasedColumns, true);
                      $existsInResultSet = in_array($columnDefinition, $result, true);
                      if ($existsInSelect || $existsInResultSet) {
                          continue;
                      }
                  }
              }
  
              $result[$columnAlias] = $columnDefinition;
          }
          return $result;
      }
docs: Returns unique column names excluding duplicates.
  Columns to be removed:
  - if column definition already present in SELECT part with same alias
  - if column definition without alias already present in SELECT part without alias too
  @param array $columns the columns to be merged to the select.
  @since 2.0.14