instead of 'publish', use 'published'
Because now the publish mode requires that the field is named 'published'
Then, try with 'a.published', in that case, it cannot conflicts with another published field (other linked table)
Also because if you use the table alias (a.) you do not need to brace you field name (`field_name`)
Your second example is coming from 1.5, right ?
I think the first one is almost good if you correct it with 'a.published'.
One thing also to understand is the switch() that fills a different SQL profile, depending of the called layout.
Means that you may choose carefully where you put your code, or to put it at the end, called every time.
Another facultative point about the SQL personalisation (filters) :
You can use the states vars of the model. It id really easy.
You can decide to call in the VIEW:
$model->setState('filter.date.today', true); //Choose any name you want for this state value
And in the model :
if ($this->getState('filter.date.today'))
$query->where('a.published = 1 AND startsensibi = curdate()');
In this way it is clean, and you can understand the use of the states vars.
The states vars are uses as switchers to change the behaviors or the model. Clever, no ?
By the way, it replace the activate() function in Cook 1.x (Now deprecated since the use of the states vars)