The problem is that the vid column in your query refers to two tables, but obviously can only store one value in the result set. To fix the problem, create an alias for it, indicating explicitly which table to use:
$selectmatchedtime = $this->dbo->select() ->from(array('v'=>'table1')) ->joinLeft(array('vc'=>'table2'),'vc.vid = v.vid') ->columns(array('vid'=>'v.vid'));
source share