Suppose we are doing the following:
my $rs = $dbix->table('foo')->left_join('bar', { 'bar_id' => 'id' })->select('bar.id');
Also suppose we defined id as primary key for table foo. DBIX::Lite will automatically retrieve that column in order to make $row->update() work. However, that overrides our ->select('bar.id').
When primary keys are automatically added by _select_sth_for_object() they should be aliased with a private name, used as primary key by $row->update().