Obrigado Carlos,
pelo endereço fornecido descobri: tinyint(aqui determina o tamanho do resultado exibido em um select).
Com relação a restrição criei outras tabelas com boolean e byte para verificação ja que não encontrei uma explicação afirmando que o boolean deveria restringir um dado diferente de 0 e 1.
Pra minha surpresa não restringe msm, segue o teste:
create table compras2(id int auto_increment primary key, valor double, data date, descricao varchar(255), recebido boolean default 0, observacoes varchar(255) not null, forma_pagt enum('dinheiro', 'cartao', 'boleto'));
desc compras2;
+-------------+------------------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+------------------------------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| valor | double | YES | | NULL | |
| data | date | YES | | NULL | |
| descricao | varchar(255) | YES | | NULL | |
| recebido | tinyint(1) | YES | | 0 | |
| observacoes | varchar(255) | NO | | NULL | |
| forma_pagt | enum('dinheiro','cartao','boleto') | YES | | NULL | |
+-------------+------------------------------------+------+-----+---------+----------------+
insert into compras2(observacoes, recebido) values('lalala',3);
Query OK, 1 row affected (0.07 sec)
mysql> select * from compras2;
+----+-------+------+-----------+----------+-------------+------------+
| id | valor | data | descricao | recebido | observacoes | forma_pagt |
+----+-------+------+-----------+----------+-------------+------------+
| 1 | NULL | NULL | NULL | 3 | lalala | NULL |
+----+-------+------+-----------+----------+-------------+------------+